防止多个用户使用同一个浏览器登录同一个域

Posted

技术标签:

【中文标题】防止多个用户使用同一个浏览器登录同一个域【英文标题】:Prevent multiple user logging into the same domain using the same browser 【发布时间】:2011-03-14 06:31:52 【问题描述】:

所以这是一个 ASP.NET 问题,其中两个用户使用同一台机器,相同的浏览器。

    用户 1 登录域。 用户 1 更改了一些数据但未保存。 用户 2 在单独的选项卡中登录域。 用户 1 切换回他的选项卡并保存数据。 用户 1 实际将数据保存到用户 2 中!!

这是由以下机制引起的:

    同一浏览器中的不同选项卡似乎共享相同的会话 ID。 我们将用户身份验证存储在 cookie 中,并且 cookie 在选项卡之间共享(同一域)

因此,当用户 1 请求保存时,由于 cookie 已更新为用户 2,因此被识别为用户 2。

所以我想知道是否还有其他方法可以防止这种情况发生,除了: 1. 使用 cookieless 会话,以便会话嵌入 uri 中。 2. 始终在页面中包含一个隐藏字段以指示哪个用户拥有该页面。

问候,

【问题讨论】:

让他们使用不同的浏览器——一个可以使用 IE,另一个可以使用 Firefox。问题解决了。 我知道使用不同的浏览器完全没问题,这就是为什么我在问题中说他们使用的是同一台机器,相同的浏览器,只是不同的标签。 类似的问题也有谷歌页面......可能还有更多网站...... 我注意到 gmail 实际上对我描述的场景有一些机制;它会弹出一条警告消息,指示“这可能已自动发生,因为另一个用户从同一浏览器登录”并自动注销前一个用户。有人知道它是怎么做的吗? 嗨 BlueFox,我知道这已经有一段时间了,但我遇到了同样的问题。你找到问题的结论了吗? 【参考方案1】:

您可以在数据库中添加一些字段来跟踪用户是否登录,并获取他们的 IP 地址,并以这种方式限制访问。

【讨论】:

抱歉,我不太确定 IP 地址会有什么帮助,因为他们使用相同的机器和浏览器(即相同的 IP)。【参考方案2】:

IE8 在打开一个新窗口的文件菜单中有一个“新会话”命令,但这很像使用 2 个不同的浏览器。

在当前用户退出之前隐藏登录表单将提高其他用户已登录的意识,但不会阻止上述情况。如果注销过程可以刷新域上浏览器中的每个页面,那么它可能会起作用,尽管 user1 会丢失所有修改的数据。

【讨论】:

我喜欢您的第二个建议,即在当前用户注销之前隐藏登录表单以提高意识,但是您能否详细说明应该如何实施“注销过程以刷新浏览器中的每个页面在域上”? 我不确定这是否可能,但如果有一种方法可以使用 javascript 迭代所有打开的具有相同来源的窗口,您可以在每个窗口上调用 window.location.reload() 函数。跨度> 【参考方案3】:

我使用了打开一个具有特定名称的新窗口的技巧,并始终确保打开的任何页面始终使用该窗口。

【讨论】:

以上是关于防止多个用户使用同一个浏览器登录同一个域的主要内容,如果未能解决你的问题,请参考以下文章

同源策略

求一个用Struts2做的防止用户重复登录。

跨域访问和同源策略

PayPal登录按钮,防止新窗口或自动关闭?

防止浏览器选项卡之间的会话共享

如何防止用户代理被用户更改