2008-11-19 91 views
6

我希望有人可以为我澄清这种行为,并解释ASP.NET如何决定何时处理像新的会话。ASP.NET和会话 - 新的浏览器实例与新的浏览器窗口

A)在Internet Explorer中,我加载了有问题的ASP.NET网站。它开始一个新的会话。 B)如果我进入菜单文件 - 新窗口...它保持在同一个会话中。
C)如果我启动一个新的Internet Explorer实例并加载相同的页面,它将启动一个新的会话。

我很困惑的步骤C.我期待它是基于我的远程IP相同的会话。
什么是IIS/ASP.NET做决定,这是一个新的会话? 它看着我的远程端口,IE的新实例正在使用?当你用File - New打开一个新窗口时,它使用与父窗口相同的远程端口。

回答

13

IIS/ASP.NET中的会话基于具有会话范围的cookie,这意味着它们在浏览器关闭时被破坏,显然它们不在Internet Explorer的不同进程中共享。

当您使用文件>新窗口打开一个新的浏览器窗口时,窗口将通过与第一个窗口相同的进程(即相同的iexplorer.exe)进行处理。当你从开始菜单启动IE时,你会得到一个新的进程,你现在将在任务管理器中有两个iexplorer.exe。我认为只有IE 7会产生多个进程。

作为一个方面说明,IE 8每个标签页/窗口都会有一个进程,就像Google Chrome一样。我不知道这些浏览器是否在这些进程之间共享会话cookie,但在使用这些浏览器进行测试时确实需要记住这些。

0

我不知道如果新的IE实例会有相同的cookie发生在情况B,而它是一个新的窗口,它使用相同的过程。它通常在cookie中或查询字符串中有一个用于将会话映射到各种客户端的值。

4

默认情况下,ASP.NET通过cookie跟踪会话。新的IE实例没有会话cookie,导致新的会话。但是,从现有的IE窗口使用文件 - >新窗口将创建一个与“父”相同的cookie的新窗口,从而允许ASP.NET使用现有的会话。

+1

我还应该注意到IIS和ASP.NET并没有真正有关你在注意行为上的差异。另外,请记住,会话不依赖远程IP地址,而这对于许多用户(即代理)来说通常是相同的。 – 2008-11-20 00:10:44

+0

您对远程IP的完全正确...应该想到这一点。会话cookie(与常规cookie)是HTML规范的一部分吗? – BuddyJoe 2008-11-20 13:01:09

0

会出现会话数据正在缓存每个进程。 A)和B)存在于相同的过程中,而启动IE的新实例将创建一个新过程。