ASP.NET Session_End事件未触发

时间:2013-04-03 00:45:34

标签: asp.net session-state global-asax

我正在尝试在ASP.NET会话结束时(在Windows 2008 Server上的简单WebForms应用程序中)执行数据库事务。我意识到许多受访者建议不要依赖Session_End事件(正如我在Google搜索产生的关于此主题的一百个论坛帖子中所读到的那样)。请幽默我。

我做过这些事情:

  1. 在web.config中启用会话状态:<sessionState mode="InProc" cookieless="false" timeout="1" />

  2. 确认当我调用Session.Abandon()或会话超时时,Session_End事件不会触发。

  3. 确认会话在1分钟后超时(如上所述)。

  4. 确认我没有尝试访问任何请求或响应或服务器对象(我理解会默默地出错)。

  5. 编辑:我还确认我在会话中存储数据 - 我使用了许多会话变量来存储不同的数据点,并在用户登录应用程序时实例化这些数据点。

    编辑:我也确认我没有创建会话,然后在同一个请求中放弃它。如上所述,即使会话超时(即,没有请求),问题也存在。

    请帮忙!

4 个答案:

答案 0 :(得分:1)

如果您未在会话中保存任何内容,则session_end将不会触发。 如果您在第一个请求中保存会话中的数据,并在同一请求中调用abandon,则session_end也不会被触发。

希望这有帮助!

Ť

答案 1 :(得分:1)

对于寻找解决方案但没有找到问题答案的其他人,我看到一个案例,其中项目的Global.asax定义了引用的代码隐藏文件,但是在asax中定义的事件而不是.cs文件。

在这种情况下,它会触发Session_Start,但不会触发Session_End,就好像它正在查找引用的.cs文件一样。

通过删除对文件后面的代码的引用,Session_End按预期开始触发。

答案 2 :(得分:0)

事件WAS触发,但正在执行的代码是静默错误的,因为我没有正确访问Application对象和我的一些App_Code类(我仍然不知道该怎么做,但是值得单独的Stack Overflow问题。)

答案 3 :(得分:0)

尝试从查询数据库的同一方法中初始化会话。在查询数据库之前先执行此操作。