Asp.net 在我得到异常之前,只能枚举前20个左右的cookies
Asp.net 在我得到异常之前,只能枚举前20个左右的cookies,asp.net,internet-explorer,firefox,Asp.net,Internet Explorer,Firefox,下面的代码创建100个cookie,然后通过回发对它们进行枚举 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { for (int i = 0; i < 100; i++) { HttpCookie cookie = new HttpCookie("cookie num." + i.ToString());
下面的代码创建100个cookie,然后通过回发对它们进行枚举
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
for (int i = 0; i < 100; i++)
{
HttpCookie cookie = new HttpCookie("cookie num." + i.ToString());
cookie["Cookie"] = i.ToString() + "th cookie, anyone?";
cookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(cookie);
}
int i1 = 0;
Session["i"] = i1;
}
if (IsPostBack)
{
int i = (int)Session["i"];
HttpCookie cookie= Request.Cookies["Cookie num." + i.ToString()];
Label1.Text = cookie["Cookie"];
Session["i"] = ++i;
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
对于(int i=0;i<100;i++)
{
HttpCookie cookie=新的HttpCookie(“cookie num.”+i.ToString());
cookie[“cookie”]=i.ToString()+“有人要饼干吗?”;
cookie.Expires=DateTime.Now.AddMonths(1);
Response.Cookies.Add(cookie);
}
int i1=0;
会话[“i”]=i1;
}
如果(iPostBack)
{
int i=(int)会话[“i”];
HttpCookie cookie=Request.Cookies[“cookie编号”+i.ToString();
Label1.Text=cookie[“cookie”];
会话[“i”]=++i;
}
}
Q1-但当使用Firefox时,应用程序无法枚举所有100个cookie,而只能在报告未设置为对象异常实例的对象引用之前,先遍历前20个(最多40个)cookie:
Q2-当我通过IE请求此页面时,在第一次回发时,我将始终获得未设置为对象异常实例的对象引用(顺便说一句,我检查了,IE成功地将所有100个cookie存储到一个文件中)
塔克斯
编辑: 但以下链接适用于IE,而Firefox并没有保存所有cookie。使用IE,代码无法通过任何cookie进行枚举。因此,如果我至少能够列举出IE中的前20个cookie,那么上面的答案将是有效的,而我不是
2.编辑: 该规范无法保证浏览器在存储空间不足时必须保留哪些cookie,因此浏览器可以自由地按照自己的喜好进行操作,您应该期望不同的行为。此外,在您的示例中,所有cookie都设置在单个响应的头中。HTTP头是不按顺序排列的,因此不能保证它们首先会按任何特定顺序进行处理 你所说的“加工”到底是什么意思?
谢谢你帮了我的忙 预计到达时间: 但以下链接适用于IE,而Firefox并没有保存所有cookie 是的,但是文章引用了RFC2109,这也适用于Firefox 至于何时出现错误,这将取决于浏览器决定保留哪些cookie。如果它保持前20个cookie的设置,那么您将在cookie20中得到一个错误;如果它扔掉以前的cookie为新cookie腾出空间,那么只剩下cookie80-cookie99,尝试访问cookie0将出错 该规范无法保证浏览器在存储空间不足时必须保留哪些cookie,因此浏览器可以自由地按照自己的喜好进行操作,您应该期望不同的行为。此外,在您的示例中,所有cookie都设置在单个响应的头中。HTTP头是不按顺序排列的,因此不能保证它们首先会按任何特定顺序进行处理 RFC2109的限制通常不能完全反映现实情况,但每个浏览器都有自己的cookie限制,您通常应该努力将cookie数据降至最低。 预计到达时间: 但以下链接适用于IE,而Firefox并没有保存所有cookie 是的,但是文章引用了RFC2109,这也适用于Firefox 至于何时出现错误,这将取决于浏览器决定保留哪些cookie。如果它保持前20个cookie的设置,那么您将在cookie20中得到一个错误;如果它扔掉以前的cookie为新cookie腾出空间,那么只剩下cookie80-cookie99,尝试访问cookie0将出错 该规范无法保证浏览器在存储空间不足时必须保留哪些cookie,因此浏览器可以自由地按照自己的喜好进行操作,您应该期望不同的行为。此外,在您的示例中,所有cookie都设置在单个响应的头中。HTTP头是不按顺序排列的,因此不能保证它们首先会按任何特定顺序进行处理
RFC2109的限制通常不能完全反映现实情况,但每个浏览器都有自己的cookie限制,您通常应该努力将cookie数据降至最低。Internet Explorer拒绝您的cookie可能有几个原因(例如安全设置等) 此外,所有浏览器都有接受cookie数量的限制(20到50之间),此外cookie字符串的总长度也有限制(例如10 kB) 因此,没有机会在任何浏览器中设置100个cookie 您可以在这里找到一位Internet Explorer程序员对所有这些问题的详细答案:
Internet Explorer拒绝您的Cookie可能有几个原因(例如安全设置等) 此外,所有浏览器都有接受cookie数量的限制(20到50之间),此外cookie字符串的总长度也有限制(例如10 kB) 因此,没有机会在任何浏览器中设置100个cookie 您可以在这里找到一位Internet Explorer程序员对所有这些问题的详细答案: