我希望有人可以为我澄清这种行为,并解释ASP.NET如何决定何时对待新会话。

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

我对步骤C感到困惑。我希望它是基于我的远程IP的同一会话。
什么是IIS / ASP.NET来决定这是一个新的会话? 它是否正在查看IE的新实例正在使用的远程端口?当你使用File - New启动一个新窗口时,它使用与父文件相同的远程端口。

有帮助吗?

解决方案

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

使用File <!> gt打开新的浏览器窗口时;新窗口窗口将通过与第一个窗口相同的进程处理(即相同的iexplorer.exe)。当您从开始菜单中获取IE时,您将获得一个新进程,现在您将在任务管理器中拥有两个iexplorer.exe。我认为只有IE 7会产生多个进程。

作为旁注,IE 8每个标签/窗口都有一个进程,就像Google Chrome一样。我不知道这些浏览器是否在进程间共享会话cookie,但在使用其中一种浏览器进行测试时,一定要记住这一点。

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top