【问题标题】:Shared Sessions Cookies with Different Usernames in Different Tabs不同选项卡中具有不同用户名的共享会话 Cookie
【发布时间】:2014-01-30 00:25:41
【问题描述】:

如何使用会话 cookie 来管理登录?

使用 ASP.NET Forms 身份验证的简单方法会在用户登录时设置一个 cookie。然后在每次调用服务器时检查 cookie。

但是 cookie 在浏览器选项卡之间共享。这似乎有问题。

我在 TAB A 中以 Dave 的身份登录,然后以 Dave 的身份继续完成所有工作。

或多或少同时,我在 TAB B 上以 Alfonso 身份登录。此登录的 cookie 覆盖了 Dave cookie。

因此,TAB A 中的所有工作都以 Dave 的身份完成,“登录为”UI 元素显示 Dave,但是当我提交时,服务器执行所有工作就好像它是以 Alfonso 的身份完成的一样。

这似乎不太好。这里的最佳做法是什么?通过将加密的用户名放在每个呼叫的 URL 中来使用无 cookie 会话的唯一解决方案是吗?

【问题讨论】:

    标签: authentication cookies tabs


    【解决方案1】:

    最佳做法是确保您的逻辑正确处理身份验证。这是一个常见问题,因为您需要考虑此类问题,以及“如果我提交表单,即使用户已注销,会发生什么?”

    1. 当您已经以 Dave 身份登录时,您不应该以 Alfonso 身份登录。您必须先以 Dave 的身份注销。如果登录屏幕已经出现在选项卡上,即使 Dave 已登录,登录后的回发应该意识到用户已经登录(因此 Alfonso 无法登录)。

    2. 每次保存数据时,都应确保执行工作的人 1) 仍处于登录状态,并且 2) 是正确的人。

    如果您希望某个旧选项卡自动识别用户已经注销,或者现在是其他人,那将需要更多的工作(AJAX)...没有它,上面的第 2 条将解决您的问题.

    【讨论】:

    • 如果请求附带了 Dave 的会话 cookie,我当然可以阻止 Alfonso 的登录。但是这里是否存在时间窗口问题:Dave 在 TAB A 上登录。在响应返回 cookie 之前,Alfonso 在 TAB B 上登录。Alfonso 的登录将被接受,因为它也没有伴随它的会话 cookie。
    • 这听起来不太合理。在您收到回复之前,有人可以打开新标签并登录,您的登录速度有多慢?这在现实生活中什么时候会发生?在这种情况下,一个人仍然只登录过,因此帖子中倒数第二段中的问题永远不会发生。
    • 这不太可能,我同意。 “不太可能”不是我在设计要安全管理的软件时使用的常用标准。
    • @dkeisen 我没有说“不太可能”。我说“不太合理”,如“不合理”。如果奇迹发生了你的情况......那么仍然只有一个人会登录,而我的回答中的项目符号 2)仍然保证你的应用程序安全。
    • 我认为的区别是“安全”与“用户感知”。类似地,如果 Dave 已登录,有未保存的工作,离开他的计算机,Alfonso 偷偷溜过去,打开一个新标签,然后将他注销,然后返回标签,Dave 回来并点击保存......将会有一个问题,数据不应该保存。 Alfonso 是否以自己的身份登录。现在,如果您希望 UI 自动反映 Dave 已注销,或者现在是 Alfonso,就像我在回答中所说的那样,这将需要更多的工作。
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多