我在我的开发机器上运行一个 ASP.NET 网站(Vista/IIS7 上的 .NET 2.0)。global.asax.cs 中的 Session_Start 方法记录对文件 (log4net) 的每次调用。Session_End 方法还会记录每个调用。
我正在使用 InProc 会话状态,并将会话超时设置为 5 分钟(以避免等待 20 分钟)。
我访问了网站,等待 5 分钟,我看到了 Session_End 日志记录。然后我 F5 网站。浏览器仍然拥有会话 cookie 并将其发送到服务器。调用 Session_Start 并使用相同的会话 id 创建一个新会话(顺便说一句:我需要它是相同的会话 id,因为它用于在数据库中存储数据)。
结果:每次我在以前结束的会话上按 F5 时,都会调用 Session_Start 方法,执行请求并立即调用 Session_End 方法。
当我打开不同的浏览器时,Session_Start 方法只被调用一次。然后 5 分钟后 Session_End 每个 F5 导致 Session_Start/request/Session_End 序列执行。
web.config 相关部分:
<system.web>
<compilation debug="true" />
<sessionState timeout="2" regenerateExpiredSessionId="false" />
</system.web>