ASP.NET和会话-新浏览器实例与新浏览器窗口

ASP.NET和会话-新浏览器实例与新浏览器窗口,asp.net,iis,session,session-state,Asp.net,Iis,Session,Session State,我希望有人能为我澄清这种行为,并解释ASP.NET是如何决定何时处理新会话之类的事情的 A) 在Internet Explorer中,我加载有问题的ASP.NET站点。它将启动一个新会话。 B) 如果我进入菜单文件-新建窗口。。。它保持在同一会话中。 C) 如果我启动一个新的Internet Explorer实例并加载同一页面,它将启动一个新会话 我对步骤C感到困惑。我希望它是基于我的远程IP的相同会话。 IIS/ASP.NET如何确定这是一个新会话? IE的新实例正在使用的是我的远程端口吗?当

我希望有人能为我澄清这种行为,并解释ASP.NET是如何决定何时处理新会话之类的事情的

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

我对步骤C感到困惑。我希望它是基于我的远程IP的相同会话。
IIS/ASP.NET如何确定这是一个新会话?
IE的新实例正在使用的是我的远程端口吗?当您使用File-new启动一个新窗口时,它使用与父窗口相同的远程端口。

我想知道新IE实例是否会有与案例B相同的cookie,在案例B中,当它是一个新窗口时,它使用的是相同的过程。通常在cookie或querystring中有一个值用于将会话映射到各种客户端。

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

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

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

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


作为补充说明,IE8将有一个单一的进程,每个标签/窗口,就像谷歌浏览器。我不知道这些浏览器是否在进程中共享会话cookie,但在使用其中一种浏览器进行测试时一定要记住这一点。

我还应该注意,IIS和ASP.NET与您注意到的行为差异并没有任何关系。另外,请记住,会话不依赖远程IP地址,对于许多用户(即代理),远程IP地址通常是相同的。。。我应该想到这一点。会话cookie(相对于常规cookie)是HTML规范的一部分吗?我不相信它是规范的一部分,会话cookie与任何其他cookie都没有什么不同,只是它的值恰好包含一个唯一的标识符,该标识符也是ASP.NET“已知”的。但是,根据HTTP规范,此cookie通常作为HTTP头传输。请注意,禁用cookie时,仍然可以通过使用GET/POST参数传递会话密钥来维护会话。服务器将此字段作为隐藏字段嵌入到表单中,或者作为URL的一部分嵌入,这会导致浏览器在下一个请求中包含密钥。如果您想查看引擎盖下发生的情况,请查看ieHTTPHeaders,它将在IE中安装一个“查看->浏览器栏->项目”,让您可以查看HTTP标头流量。例如,在场景B中,您可以看到浏览器如何从一开始就将会话cookie传输到服务器。IE6也这样做了。不确定5.IE8是否在选项卡和窗口之间共享会话,除非您使用“文件”菜单中的“新建会话”选项。当用户转换到IE8时,这在我们的一些网站上造成了破坏行为。