【问题标题】:In Asp.net what would you put in the Session_Start and Session_End events in Global.asax?在 Asp.net 中,您会在 Global.asax 中的 Session_Start 和 Session_End 事件中添加什么?
【发布时间】:2009-04-30 19:49:43
【问题描述】:

如果不是代码,您能否提供一些通用的解释?

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    在 Session_Start 中,您可以设置与会话相关的任何内容,这在很大程度上取决于应用程序。

    一般而言,如果可能,您应该避免使用 Session_End,它不仅通常会触发很晚(会话超时后),而且在多服务器配置中它根本不会触发。

    详情参见Web.config中的SessionState标签

    【讨论】:

      【解决方案2】:

      提醒自己为什么永远不要使用 Session_End 总是好的

      来自Understanding session state modes + FAQ的摘录


      1. Session_End 事件仅在 InProc 模式下受支持。
      2. 如果您关闭浏览器,Session_End 将不会被触发。 HTTP 是一个 无状态协议,服务器无法知道浏览器是否有 关闭与否。
      3. Session_End 只会被触发:
        (一个)。在 n 分钟不活动后(n = 超时值),

        (b)。如果有人调用 Session.Abandon().
      4. 对于情况 (a)(第 3 点),Session_End 将由后台线程运行, 这意味着: (一个)。您在 Session_End 中的代码正在使用工作进程帐户运行。 如果您正在访问资源,例如 数据库。 (b)。如果 Session_End 发生错误,它将静默失败。
      5. 对于情况 (b)(第 3 点),为了使 Session_End 被解雇,你的会话状态必须首先存在。这意味着你必须存储 一些数据处于会话状态并且已经完成了至少一个请求。
      6. 同样对于情况 (b) (Point3),仅当 实际上找到了被放弃的会话。结果,如果您创建并放弃 同一请求中的会话,因为该会话尚未保存 因此找不到, Session_End 不会被调用。这是 .NET 中的一个错误 框架 1.0 和 1.1。

      【讨论】:

        【解决方案3】:

        Session_Start 收集所有用户信息并存储在数据库中。为用户准备系统,如临时文件、缓存文件。

        Session_End 在数据库中保存用户状态。清洗系统等

        【讨论】:

          【解决方案4】:

          最常见的例子是统计在线用户。在Session_Start 上增加计数,在Session_End 上增加计数。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多