我希望有人可以为我澄清这种行为,并解释ASP.NET如何决定何时对待新会话。
A)在Internet Explorer中,我加载了有问题的ASP.NET站点。它开始了一个新的会议 B)如果我转到菜单文件 - 新窗口......它会保持在同一个会话中 C)如果我启动一个新的Internet Explorer实例并加载相同的页面,它将启动一个新的Session。
我对步骤C感到困惑。我希望它基于我的远程IP是同一个会话 什么是IIS / ASP.NET来决定这是一个新的会话? 它是否正在查看IE的新实例正在使用的远程端口?当你使用File - New启动一个新窗口时,它使用与父文件相同的远程端口。
答案 0 :(得分:13)
IIS / ASP.NET中的会话基于具有会话范围的cookie,这意味着它们在浏览器关闭时会被销毁,显然它们不会在Internet Explorer的不同进程中共享。
使用File>打开新的浏览器窗口时新窗口窗口将通过与第一个窗口相同的进程处理(即相同的iexplorer.exe)。当您从开始菜单中获取IE时,您将获得一个新进程,现在您将在任务管理器中拥有两个iexplorer.exe。我认为只有IE 7会产生多个进程。
作为旁注,IE 8每个标签/窗口都有一个进程,就像Google Chrome一样。我不知道这些浏览器是否在进程间共享会话cookie,但在使用其中一种浏览器进行测试时,一定要记住这一点。
答案 1 :(得分:4)
默认情况下,ASP.NET通过cookie跟踪会话。新的IE实例没有会话cookie,导致新的会话。但是,使用File - >现有IE窗口中的新窗口将创建一个与“父”具有相同cookie的新窗口,允许ASP.NET使用现有会话。
答案 2 :(得分:0)
我想知道新的IE实例是否会在案例B中发生相同的cookie,虽然它是一个新窗口,但它使用相同的过程。通常在cookie或查询字符串中有一个值用于将会话映射到各种客户端。
答案 3 :(得分:0)
每个进程看起来会话数据都会被缓存。 A)和B)存在于同一个过程中,而启动IE的新实例将创建一个新过程。