asp.net - 防止与多个浏览器窗口共享 session

标签 asp.net session browser

我正在开发 ASP.NET 应用程序。当我在本地主机上调试 Web 应用程序时,两个不同的浏览器窗口需要两个不同的 session ID。但是,当我将其发布到服务器上并在计算机上打开应用程序时, session 将与所有浏览器窗口共享。 我希望两个不同的用户在两个不同的浏览器中登录。是否可以?如果不是,那么是什么原因导致我的本地主机需要两个不同的 session ,而当我在服务器上发布它时又需要一个 session

非常感谢,

最佳答案

这是设计使然,您对此无能为力。无论您使用的是 2 个窗口还是同一窗口中的 2 个选项卡(假设浏览器类型/供应商相同),您都无法同时使用两个不同的帐户登录同一网站。

您必须专门开发一个网站来支持同时管理多个不同的帐户(Google 就是这样做的,但有限制)。我看到完成的方法是为用户定义一条记录,并为属于该用户的帐户定义单独的记录。然后,您可以让用户登录,并询问他们 - 每个页面 - 他们想要管理哪个帐户,维护每个页面的状态 - 并拥有某种帐户切换机制(例如下拉列表),以便他们可以切换帐户。同样,这将是针对每个页面的,涉及 View 状态(或类似的机制),并且 session 仍将被共享。

实现这一点的另一种方法是在 URL 中包含某种帐户标识符;例如

http://mysite.com/account-1234/default.aspx
http://mysite.com/account-5678/default.aspx

这将允许单个用户管理多个帐户。如果您想维护单独的登录,则必须根据 URL 中的 account-id 部分进行授权,并且必须维护单独的身份验证 cookie(使用不同的 cookie 名称;例如“auth-1243”和“auth-5678”) ") - 这意味着您必须在身份验证级别上做一些工作。而且, session 将被共享,因此您无法在其中存储单个特定于帐户的数据(它必须位于“帐户”集合中,根据 cookie 中的 id 检索)。请求的 URL 必须始终与 cookie 匹配,否则您可能会使用 cookie-path 来创建该限制。

我个人喜欢第二种选择,并且我认为这是可行的;只是我可能会在 URL 中使用 URL 编码的电子邮件地址,因为这样更容易记住(即使更长),或用户名(如果您在网站上管理这些地址,因为它们是唯一的)。 +1

关于asp.net - 防止与多个浏览器窗口共享 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131765/

相关文章:

c# - 如何在按钮单击事件的模态弹出扩展程序中的 iframe 中加载页面?

java - 为不同的 session 获得相同的 Threadlocal

django - Django 模板缓存刷新的问题

java - 有没有某种方法可以在浏览器中或嵌入在java应用程序中的浏览器中启用跨站点javascript

javascript - 我们可以在页面呈现时隐藏页面中的 javascript 评论吗?

asp.net - 在不同的数据库架构上创建 ASP.NET 用户和角色表

javascript - 如何从 JavaScript 执行 asp.net 按钮单击事件?

c# - 检查 url 是否可达 - 帮助优化类

php - PHP 如何知道何时删除 session ?

security - 网址重写 - 这会导致安全问题吗?