4. ASP中APPlication.Cookie和Session对象的特点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4. ASP中APPlication.Cookie和Session对象的特点相关的知识,希望对你有一定的参考价值。

参考技术A Cookie:Cookie 提供了一种在 Web 应用程序中存储客户端用户信息的方法。例如,当用户访问您的网站时,你可以使用Cookie 存储用户首选项或其他信息。当该用户再次访问您的网站时。就可以检索以前存储的信息。但很多浏览器对Cookie有4096字节的限制。
Cookie的关键特性有:存储于客户端硬盘上,与用户相关,在一定时间内持久化存储,可以跨浏览器共享数据,需要被序列化,发生服务器-客户端数据传输。(书上找的)
Session:为当前用户会话提供信息。还提供对可用于存储信息的会话范围的缓存的访问,以及控制如何管理会话的方法。应用程序状态是可供 ASP.NET 应用程序中的所有类使用的数据储存库。它存储在服务器的内存中,因此与在数据库中存储和检索信息相比,它的执行速度更快。与不特定于单个用户会话的应用程序状态不同,会话状态应用于单个的用户和会话。因此,应用程序状态非常适合存储那些数量少、随用户的变化而变化的常用数据。而且由于其不发生服务器-客户端数据传输,Session还适合存储关于用户的安全数据,如购物车信息。
Session的关键特性有:存储于服务器内存中,与会话相关,在会话的整个生存期中存在即不会被主动丢弃,不被序列化,不发生服务器-客户端数据传输。

在 Django 中,根据模型中其他字段中选择的值删除选择字段下拉列表中的选项

【中文标题】在 Django 中,根据模型中其他字段中选择的值删除选择字段下拉列表中的选项【英文标题】:In Django, remove options in a choice-field dropdown based on the value selected in other field in a model 【发布时间】:2021-12-13 10:27:49 【问题描述】:

我是 Django 新手,感谢任何帮助,如何根据前一个字段限制一个字段中的选择选项。例如,如果我为动物选择“狗”,我想从 FOOD_CHOICE 中删除“巧克力”。谢谢!!!

ANIMAL_CHOICE = (
     ('a','cat'),
     ('b','dog'),
     ('c','fish'),
)
FOOD_CHOICE = (
      ('a', 'chocolate'),
      ('b', 'kittySnack'),
      ('c', 'steak'),
)

class Animal(models.Model):
    animal = models.CharField(max_length=1, choices= ANIMAL_CHOICE)
    food   = models.CharField(max_length=1, choices= FOOD_CHOICE)

【问题讨论】:

这个最好在表格里申请,这个型号请加上你的表格代码 【参考方案1】:

As explained here,您应该在模型表单或模型清理方法中进行验证,并在那里提出ValidationError

这里有一个例子,你可以override the clean method of your model's form:

forms.py

class AnimalForm(ModelForm):
    class Meta:
        model = Animal
        fields = "__all__"

    def clean(self):
        cleaned_data = super(AnimalForm, self).clean()
        animal = self.cleaned_data.get("animal")
        food = self.cleaned_data.get("food")
        if animal == "b" and food == "a": # Might not work, but this is the general idea
            raise forms.ValidationError("Chocolate can't be selected with Dogs")

N.B.:在我评论说它可能不起作用的那一行,你必须调试一下。我不记得(我现在无法测试)cleaned_data 是否返回元组或实际值,或人类可读的值。

现在,我猜您希望 HTML 中的选择能够动态更改。对于前端,您需要做一些 JavaScript。使用 JS 的方法有很多种,这里有一种:

(在您的模板中,<script> 标签之间)

var selectAnimal = document.getElementById("select-animal");
var selectFood = document.getElementById("select-food");

selectAnimal.addEventListener("change", function() 
    if(this.value == "a")
    
        
        // remove from select the "chocolate" option
        for (var i=0; i<selectFood.length; i++) 
            if (selectFood.options[i].text == 'chocolate')
                selectFood.remove(i);
        
    
    else 
        
        // checking if "chocolate" is in select or not
        let has_chocolate = false;
        for (var i=0; i<selectFood.options.length; i++)
            if (selectFood.options[i].text == "chocolate")
                has_chocolate = true;
            
        
        
        if (!has_chocolate) // if "chocolate" is missing
            option = document.createElement("option");
            option.text = "chocolate";
            option.value = "a";
            selectFood.add(option);
        
    
);

【讨论】:

以上是关于4. ASP中APPlication.Cookie和Session对象的特点的主要内容,如果未能解决你的问题,请参考以下文章

利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题

代码流中未返回 Nonce cookie,而是返回了 .AspNetCore.Identity.Application cookie

chrome 升级后如果配置自由设置cookie

chrome 升级后如果配置自由设置cookie

asp中如何实现随机4位数的验证码?

asp.net 4.0 和 asp.net 4.0 集成管道有啥区别?