【问题标题】:How to detect when sessions expire in asp.net?如何检测asp.net中的会话何时过期?
【发布时间】:2011-06-19 23:54:12
【问题描述】:

我想跟踪用户是否退出或他们的会话过期。我现在需要知道他们的会话何时到期(在 +/- 5 分钟内)。现在,如果用户在浏览器中打开页面并在一天后返回,我会知道当他在一天后尝试做某事时它已过期 - 但实际上会话在一个小时不活动后过期。

我想在服务器上每 5 分钟运行一次脚本,检查哪些会话已过期并检测它们,然后将过期时间记录在数据库中。 如何让脚本在服务器上以如此短的间隔连续运行? 脚本的具体作用是什么? 有没有更好的方法来做到这一点?

【问题讨论】:

  • 你为什么要这样做?

标签: asp.net session detect


【解决方案1】:

在您的global.asax 中,您可以捕获Session_End 事件。有关详细信息,请参阅此问题:

请注意,5 分钟的超时并不容易,因为您必须等待会话到期(通常为 20 分钟)才能检测到不活动。因此,如果您真的需要短间隔,则需要

另一方面,你还需要

  • 确保在打开浏览器的情况下 5 分钟不活动不会导致会话被放弃(除非您希望用户在离开计算机去喝咖啡时失去会话)。例如,可以通过using JavaScript 实现这种“自动保活”。

【讨论】:

  • 这仅在 SessionState 设置为 InProc 时有效。另一个不同细节的 SO 问题:stackoverflow.com/questions/1262867/…
  • 可能还值得注意的是,如果您检查会话是否存在,它将重置它的超时计时器(如果存在)...
  • @hunter,还有更多相关信息吗? :-)
  • @hunter 是的,我不知道它被重置了
  • 如果您在 Session 中触摸一个项目并且它被设置为过期,它将重置它的计时器。检查== null 是否会导致它重置。
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 2011-07-02
  • 2010-12-02
  • 1970-01-01
  • 2012-05-15
  • 2014-10-15
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多