在Asp.net中,你会把Global.asax中的Session_Start和Session_End事件放入什么?

时间:2009-04-30 11:22:18

标签: asp.net session

如果不是代码,请提供一些通用解释?

4 个答案:

答案 0 :(得分:4)

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

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

有关详细信息,请参阅Web.config中的SessionState标记

答案 1 :(得分:4)

总是很好的提醒自己为什么我们永远不应该使用Session_End

来自Understanding session state modes + FAQ


  1. 仅在InProc模式下支持Session_End事件。
  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 实际上发现了被遗弃的会话因此,如果您创建并放弃 同一个请求中的会话,因为会话尚未保存 因而无法找到,Session_End将不会被调用。这是.NET中的一个错误 框架1.0和1.1。

答案 2 :(得分:2)

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

<强> Session_End中 在数据库中保存用户状态。清洁系统等。

答案 3 :(得分:1)

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