ASP.NET:具有相同会话ID的大量Session_Start

时间:2010-02-09 13:20:29

标签: asp.net session global-asax

我在我的开发盒上运行一个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_Start方法。然后在5分钟后,Session_End每个F5都会导致Session_Start方法执行。

任何人都可以解释为什么会这样吗?

更新: 会话超时后,所有后续请求都会有一个会话开始&会话结束。所以最后我的问题是:为什么这些后续请求的会话立即关闭?

2010-02-09 14:49:08,754 INFO  Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,754 INFO  Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET http://localhost:80/js/settings.js
2010-02-09 14:49:08,756 INFO  Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,760 INFO  Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,760 INFO  Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=core
2010-02-09 14:49:08,761 INFO  Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,762 INFO  Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,762 INFO  Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /js/package.aspx?name=all
2010-02-09 14:49:08,763 INFO  Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,763 INFO  Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,763 INFO  Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=rest
2010-02-09 14:49:08,764 INFO  Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,764 INFO  Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,765 INFO  Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=vacation
2010-02-09 14:49:08,765 INFO  Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq

web.config相关部分:

<system.web>
  <compilation debug="true" />
  <sessionState timeout="2" regenerateExpiredSessionId="false" />
</system.web>

3 个答案:

答案 0 :(得分:1)

你可以发帖给你web.config吗?

检查system.web / sessionState中的 regenerateExpiredSessionId

答案 1 :(得分:0)

您是否正在更改网络应用的bin文件夹? 就像登录bin文件夹一样,这可能导致会话开始多次触发。

答案 2 :(得分:0)

我认为你误解了regenerateExpiredSessionId的含义。您当前将其设置为false,这意味着它将重新使用过期的会话ID,而不是每次用户获得新会话时生成新的会话ID。 ASP.NET会话ID保存在用户cookie中,当regenerateExpiredSessionId设置为false时,只要cookie有效,用户就会为每个新会话重用相同的会话ID。

尝试将regenerateExpiredSessionId设置为true。