2

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

  1. 用户 1 登录域。
  2. 用户 1 更改了一些数据而不保存它。
  3. 用户 2 在单独的选项卡中登录域。
  4. 用户 1 切换回他的选项卡并保存数据。
  5. 用户 1 实际将数据保存到用户 2 中!!

这是由以下机制引起的:

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

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

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

问候,

4

3 回答 3

0

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

于 2010-07-10T15:02:46.120 回答
0

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

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

于 2010-07-10T15:54:26.543 回答
0

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

于 2010-07-16T21:37:46.377 回答