自动cookie值已设置

时间:2011-08-23 12:38:20

标签: javascript browser

我面临一个关于浏览器cookie值的非常奇怪的问题。 我正在使用IE8,我希望以这样的方式管理会话:当任何新用户尝试连接我的应用程序时,前一个实例应该自动关闭。

为此,我每次为每个用户的登录尝试和递增设置cookie。 现在这个场景在IE6中完美运行但在IE8中我遇到了这个问题: 当用户第一次登录时,cookie值设置为ex 1.现在我打开另一个IE8窗口并再次使用cookie值2登录。现在,当我转到上一个实例时,cookie值也变为2(应该是1套)。

因此,不应该发生应用程序的多个实例。 此外,当我从1个实例注销时,另一个实例会自动注销。 在任何情况下我一次只需要一个实例。 (这种情况在不同的浏览器中完全有效,即FF和IE,即在IE / FF中打开第一个实例,在FF / IE中打开第二个实例)。

1 个答案:

答案 0 :(得分:2)

原因是IE的两个实例都将cookie写入同一位置(cookie只是硬盘上的文件)。虽然从您的Web应用程序看起来可能是两个不同的客户端,但从前端开始,当您从第二个窗口登录时,cookie将被保存,覆盖以前的cookie。现在第一个实例只看到新的cookie并将其愉快地发送到服务器。如果您只是手动编辑cookie文件,也会发生同样的情况。这不是一个错误 - 这就是cookie应该如何工作。请注意,如果您使用不同的计算机,则会显示您的预期行为。

要防止来自同一台计算机和同一个应用的多个同时会话,您可以使用其他技术。例如,在客户端登录时,哈希登录时间戳并将此哈希保存到用户帐户。然后将此哈希值发送到每个页面,并让浏览器在请求新页面时将此哈希值发送给您。在服务器上,将从客户端接收的哈希值与针对用户帐户存储的哈希值进行比较。如果它们不匹配,那么您在此窗口中注销应用程序,因为显然在另一个窗口中已完成另一个登录。这将适用于同一应用程序的多个选项卡/窗口以及不同的窗口/计算机。我过去曾使用过这种技术。当然,它并非完全万无一失(没有),但它适用于我需要的所有情况。