2014-01-29 44 views
0

如何使用会话cookie管理登录?在不同标签中使用不同用户名的共享会话Cookie

当用户登录时,使用ASP.NET Forms Authentication等天真的方法设置cookie。然后在每次调用服务器时检查Cookie。

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

我在TAB A中以Dave的身份登录,然后继续以Dave身份执行所有操作。

或多或少同时出现,我以TAB B上的Alfonso身份登录。此登录名的cookie会覆盖Dave cookie。

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

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

回答

0

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

  1. 如果您已经以Dave身份登录,您应该无法以Alfonso的身份登录。您必须先以戴夫身份注销。如果登录屏幕已经存在于一个标签上,即使Dave已经登录,登录后的回传应该意识到用户已经登录(所以Alfonso无法登录)。

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

如果你想要一些旧的标签来自动实现用户自注销,或者是现在别人,这将需要多一点的工作(AJAX)......没有它,子弹2。从上面会处理你的问题。

+0

如果Dave的会话cookie附带请求,我当然可以防止Alfonso的登录。但是这里没有时间窗口问题:Dave登录到TAB A上。在响应返回cookie之前,Alfonso登录到TAB B. Alfonso的登录将被接受,因为它也没有随附的会话cookie。 – dkeisen

+0

这听起来像一个不太合理的情况。您的登录有多慢,有人可以在获得响应之前打开新标签并登录?现实生活中什么时候会发生?在这种情况下,一个人仍然只能登录,因此在帖子的第二到最后一个段落中的问题永远不会发生。 – MikeSmithDev

+0

这不太可能,我同意。当设计安全管理软件时,“不太可能”不是我使用的通常标准。 – dkeisen

相关问题