我们的许多内部和外部用户都启动了我们的Web应用程序。然后在稍后的某个时刻,他们会在浏览器中打开一个新窗口。他们希望运行2个独立的应用程序会话。但是,通过这种方式,它们实际上使用相同的会话数据。
在代码中是否有办法确定是否有另一个浏览器窗口打开同一个会话?
我们正在使用VS 2008,C#和/或VB.Net。
感谢。
结合我的反应:
也许我说错了。当他们打开第二个窗口并将其更改为不同的窗口小部件编号,然后返回到原始窗口时,在下一个回发后,它将使用第二个窗口的窗口小部件编号,而不是它自己的
我们正在使用IE7。
答案 0 :(得分:2)
答案 1 :(得分:1)
有关IE7和IE8的讨论,请参阅http://blogs.msdn.com/ie/archive/2009/05/06/session-cookies-sessionstorage-and-ie8.aspx。
答案 2 :(得分:1)
我测试过的主要浏览器(IE,FF和谷歌浏览器)都默认使用相同的Cookie集合,无论您是在新标签页还是新浏览器实例中打开重复的网页。
结果是,默认情况下,2个不同的选项卡或同一浏览器的2个实例看起来与服务器的会话相同。
由于多个实例使用相同的cookie,服务器无法区分它们的请求,并将它们与相同的Session数据相关联,因为它们都具有相同的SessionID,假设基于cookie的SessionID。
通常这种行为没有任何问题,你必须有一个很好的商业案例来反对那种想要编写解决方案的行为。
我不相信可以区分不同的浏览器选项卡和服务器端代码。可能有某种客户端脚本黑客可能有所帮助。
包含Html元刷新标记是否有帮助,以便各种标签至少定期更新?
另一方面,如果你所追求的是将一组用户/服务器交互视为一种“会话中的会话”,你可以通过存储一个随机的Guid(或Widget)来做到这一点。在ViewState中编号,并在回发时检查它。
希望这有帮助。
答案 3 :(得分:0)
他们没有共享相同的数据。在新的浏览器窗口中启动一个新会话,并启动单独的数据库访问。
答案 4 :(得分:0)
您可以检查Fiddler中的标题,也可以在Windows中输出Session.ID。为每个浏览器实例创建会话,而不是为每个窗口创建。