防止与多个浏览器窗口共享会话

时间:2012-02-03 16:14:14

标签: asp.net session browser

我正在开发asp.net应用程序。当我在本地主机上调试我的Web应用程序时,它需要两个不同的会话ID用于两个不同的浏览器窗口。但是,当我在服务器上发布它并在我的计算机会话上打开应用程序与所有浏览器窗口共享时。 我希望两个不同的用户登录两个不同的浏览器。可能吗?如果不是因为它为我的本地主机采用两个不同的会话,而在我在服务器上发布它时会有一个

非常感谢,

的Ni

2 个答案:

答案 0 :(得分:3)

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

您必须专门开发该网站,以支持同时管理多个不同的帐户(Google会这样做,但有局限性)。我看到完成的方式是为USER定义一条记录,并为属于该用户的ACCOUNTS分别记录。然后,您可以让用户登录,并按每个页面 - 他们想要管理哪个帐户,按照每个页面维护该状态 - 并具有某种帐户切换机制(例如下拉列表)以便他们可以切换帐户。再次,这将是每页,涉及viewstate(或类似机制),会话仍然是共享的。

实现这一目标的另一种方法是在URL中使用某种帐户标识符; e.g。

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

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

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

答案 1 :(得分:0)

有趣的问题。我有一个ASP.NET应用程序。为了在不同的窗口中启用多个会话,我使用存储在由应用程序生成的会话编号标记的会话变量中的不同集合来保存每个窗口的上下文。一些代码,但它的工作原理。