Javascript 饼干怪癖

Javascript 饼干怪癖,javascript,internet-explorer,cookies,Javascript,Internet Explorer,Cookies,我们面临一个问题,即IE中的以下检查间歇性失败: 伪代码: setCookie("name","value", "1d"); if(getCookie("name") === "value"){ return SUCCESS; } else { return FAILURE; } 这个小例程检查用户是否启用了cookies。它不应该失败,但它确实失败了。 是因为IE只能处理一定数量的饼干吗?(我们放了很多饼干) 是否有其他更可靠的cookie检查方法?是的,即每个主机都有一个预设的c

我们面临一个问题,即IE中的以下检查间歇性失败:

伪代码:

setCookie("name","value", "1d");
if(getCookie("name") === "value"){ 
  return SUCCESS;
} else {
  return FAILURE;
}
这个小例程检查用户是否启用了cookies。它不应该失败,但它确实失败了。 是因为IE只能处理一定数量的饼干吗?(我们放了很多饼干)


是否有其他更可靠的cookie检查方法?

是的,即每个主机都有一个预设的cookie限制。之后,程序开始丢弃cookie。查看更多信息


我建议您仅使用cookie来跟踪用户ID,对于其他所有内容,您应该使用类似“会话状态”的内容。

是的,IE对每个主机都有预设的cookie限制。之后,程序开始丢弃cookie。查看更多信息


我建议您仅使用cookies来跟踪用户ID,对于其他所有内容,您应该使用类似“会话状态”的内容。

正如bastos.sergio所说,使用会话

这就是说,如果您有负载平衡的web服务器,请忽略会话,并在需要时直接从数据库服务器中提取数据

如果是单个web服务器,则使用会话

无论如何,请查看您正在存储的数据。域的所有cookie都会在每次web请求时发送回。还为每个web请求加载所有会话数据

如果您不需要每个网页的数据,那么您不应该将其缓存在cookie或会话中,因为它实际上会导致比需要时拉取更大的性能损失

这就是为什么通常存储在cookie或会话中的只有像用户id这样的简单项目

此外,我认为IE将站点限制为20个单独的cookie,总共4KB的数据。

更新:取消20的限制。IE 5、6和7支持最多50个cookie,前提是应用了2007年8月的特定更新。然而,4KB的限制仍然存在


看看到底是什么涵盖了为什么大量的饼干是个坏主意。

正如巴斯托斯·塞尔吉奥所说,使用会话

这就是说,如果您有负载平衡的web服务器,请忽略会话,并在需要时直接从数据库服务器中提取数据

如果是单个web服务器,则使用会话

无论如何,请查看您正在存储的数据。域的所有cookie都会在每次web请求时发送回。还为每个web请求加载所有会话数据

如果您不需要每个网页的数据,那么您不应该将其缓存在cookie或会话中,因为它实际上会导致比需要时拉取更大的性能损失

这就是为什么通常存储在cookie或会话中的只有像用户id这样的简单项目

此外,我认为IE将站点限制为20个单独的cookie,总共4KB的数据。

更新:取消20的限制。IE 5、6和7支持最多50个cookie,前提是应用了2007年8月的特定更新。然而,4KB的限制仍然存在

看看哪一个涵盖了为什么大量的饼干是个坏主意

是因为IE只能处理一定数量的饼干吗

可能是,但这个限制相当高 — 比你在实践中应该设定的要多得多。不要在cookie中放入大量数据;它们会在每次HTTP请求时发送,从而降低应用程序的速度。在IE上,您可以在中存储大量数据,在更新的浏览器上,您可以使用任何一种方式,而无需HTTP开销。但依赖这些并不能实现兼容性。您真的需要在客户端存储那么多吗?对于一个通用的web应用程序,这可能是你做错了的一个信号

有没有其他更可靠的方法来进行cookie检查

不,差不多就是这样。请注意,您可能无法设置具有过期日期的cookie,但可以成功设置会话cookie(无过期日期;在浏览器关闭时过期)。这是因为在IE中,当您阻止持久cookie时,它们会被完全阻止,而不像在其他浏览器上那样降级为会话cookie。因此,出于某些目的,您需要两张支票

是因为IE只能处理一定数量的饼干吗

可能是,但这个限制相当高 — 比你在实践中应该设定的要多得多。不要在cookie中放入大量数据;它们会在每次HTTP请求时发送,从而降低应用程序的速度。在IE上,您可以在中存储大量数据,在更新的浏览器上,您可以使用任何一种方式,而无需HTTP开销。但依赖这些并不能实现兼容性。您真的需要在客户端存储那么多吗?对于一个通用的web应用程序,这可能是你做错了的一个信号

有没有其他更可靠的方法来进行cookie检查


不,差不多就是这样。请注意,您可能无法设置具有过期日期的cookie,但可以成功设置会话cookie(无过期日期;在浏览器关闭时过期)。这是因为在IE中,当您阻止持久cookie时,它们会被完全阻止,而不像在其他浏览器上那样降级为会话cookie。因此,出于某些目的,您需要进行两次检查。

如我所说,您应该将用户数据存储在服务器上。例如,您可以使用“会话状态”、“视图状态”,或者在更极端的情况下,只需写入数据库即可。例如,您可以使用“会话状态”、“视图状态”,或者在更极端的情况下,只需写入数据库即可。