【问题标题】:ASP.NET: Large number of Session_Start with same session idASP.NET:具有相同会话 ID 的大量 Session_Start
【发布时间】:2011-01-14 19:35:41
【问题描述】:

我在我的开发机器上运行一个 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>

【问题讨论】:

  • 这不正是您刚才描述的以及人们期望发生的情况吗?
  • 不,我希望在 Session_End 之后只有 1 个 Session_Start,而不是按 F5 10 次(或依次单击 10 个链接)时的 10 个 Session_Start
  • 处理完请求后立即调用 Session_End 方法。

标签: asp.net session global-asax


【解决方案1】:

你能发布你的 web.config 吗?

检查 system.web/sessionState 中的 regenerateExpiredSessionId

【讨论】:

  • 我在 web.config 中没有 regenerateExpiredSessionId。我不想重新生成过期的会话 ID,这是一个要求,因为我们需要会话 ID 来更新数据库中的记录
  • 将值设置为 false 不起作用,仍然获得 1 个请求的 Session_Start/Session_End
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    尝试将 regenerateExpiredSessionId 设置为 true。

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 2012-05-01
      • 2011-08-13
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2012-06-12
      相关资源
      最近更新 更多