javascript - 自动设置 cookie 值

标签 javascript browser

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

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

因此应用程序的多个实例正在运行,这是不应该发生的。 此外,当我从 1 个实例注销时,另一个实例也会自动注销。 无论如何,我一次只需要一个实例。 (此方案在不同的浏览器(即 FF 和 IE)中完美运行,即在 IE/FF 中打开第一个实例,在 FF/IE 中打开第二个实例)。

最佳答案

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

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

关于javascript - 自动设置 cookie 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7161131/

相关文章:

css - 转换样式 :preserve-3d not working in safari?

java - 使 java applet 符合高安全标准

javascript - 为什么/什么时候 ng-content b 会是一个好的实践?

javascript - 使用 jQuery 返回 DIV 内容

javascript - 如何改进JS(Jquery)代码?一个简单的下拉菜单

javascript - 用于检查 HTML 中的更改的开发工具

android - 使非移动网站适合移动浏览器

javascript - 多次调用函数后redis连接丢失

javascript - 向 AngularJS 中的动态嵌套列表添加新输入

javascript - 使用预签名 URL 从 PUT 到 S3 的 400 错误请求