【问题标题】:ASP.NET Session_End event not firingASP.NET Session_End 事件未触发
【发布时间】:2013-04-03 00:45:34
【问题描述】:

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

我做过这些事情:

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

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

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

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

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

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

请帮忙!

【问题讨论】:

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


    【解决方案1】:

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

    希望这会有所帮助!

    T

    【讨论】:

    • 谢谢,塔马斯。是的,我在这个应用程序中使用了很多会话变量,所以我肯定会在会话中保存数据。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      结果是事件 WAS 触发了,但是正在执行的代码默默地出错了,因为我没有正确访问 Application 对象和我的一些 App_Code 类(我仍然不知道该怎么做,但值得一个单独的堆栈溢出问题)。

      【讨论】:

      • 我将一些简单的日志消息传送到一个文本文件(暂时)。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        • 2012-05-06
        • 2023-03-05
        • 2013-04-30
        • 1970-01-01
        相关资源
        最近更新 更多