以下代码创建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; } }
Q1 - 但是当使用Firefox时,应用程序只能设法在报告对象引用未设置为对象异常的实例之前经历前20个(最多40个)cookie,而不是能够枚举所有100个cookie.
Q2 - 当我通过IE请求此页面时,我将始终在第一次回发时将对象引用设置为对象异常的实例(BTW - 我已检查并且IE确实设法将所有100个cookie存储到单个文件中).
感谢名单
编辑:
但以下链接适用于IE,而Firefox则不保存所有cookie.使用IE,代码无法通过任何cookie进行枚举.因此,如果我至少能够通过前20个cookie(在IE中)进行枚举,那么上述答案将是有效的,我不是
2.编辑:
该规范不保证浏览器在存储空间不足时必须保留哪些cookie,因此浏览器可以自由地表达他们喜欢的行为,并且您应该期待不同的行为.更重要的是,在您的示例中,所有Cookie都设置在单个响应的标头中.HTTP标头不是有序的,因此无法保证它们将首先按任何特定顺序进行处理.
"处理"到底是什么意思?
thanx帮助我
您不能依赖每个主机名设置超过20个cookie.
ETA:
但以下链接适用于IE,而Firefox则不保存所有cookie.
是的,但文章引用了RFC2109,它也适用于Firefox.
至于何时收到错误,这取决于浏览器决定保留哪些cookie.如果它设置了前20个cookie,你将在cookie20中出错; 如果它丢弃了早期的cookie以便为新的cookie腾出空间,那么你将只剩下cookie80-cookie99并且尝试访问cookie0将会出错.
该规范不保证浏览器在存储空间不足时必须保留哪些cookie,因此浏览器可以自由地表达他们喜欢的行为,并且您应该期待不同的行为.更重要的是,在您的示例中,所有Cookie都设置在单个响应的标头中.HTTP标头不是有序的,因此无法保证它们将首先按任何特定顺序进行处理.
RFC2109的限制通常并不完全反映现实,但每个浏览器都有自己的cookie限制,您通常应该努力将cookie数据保持在最低限度.