如何检测ASP.NET中的会话过期?

3
我希望跟踪用户登出或会话过期的情况。我需要确切地知道他们的会话何时过期(在+/- 5分钟内)。现在,如果用户在浏览器中保持页面打开并在一天后返回,当他在一天后尝试做某事时,我将知道它已过期-但实际上,会话在一小时的不活动后就已过期了。
我想在服务器上每隔5分钟运行一个脚本,检查哪些会话已过期并检测它们,然后将过期时间记录在数据库中。 如何使脚本以如此短的间隔连续运行? 脚本具体是做什么的? 有更好的方法来完成这个任务吗?

你为什么想要这样做? - Lazarus
1个回答

10

global.asax文件中,您可以捕获Session_End事件。有关更多详细信息,请参见此问题:

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

另一方面,您还需要

  • 确保在五分钟内没有操作的情况下打开浏览器不会导致会话被放弃(除非您希望用户在离开电脑去喝咖啡时失去会话)。例如,可以通过使用JavaScript来实现这样的“自动保持活动状态”。

只有在 SessionState 设置为 InProc 时才有效。另一个具有不同细节的 SO 问题链接:http://stackoverflow.com/questions/1262867/session-end-code-on-browser-close - Joel Etherton
1
值得注意的是,如果您检查Session是否存在,它将重置其超时计时器(如果存在)。 - hunter
@hunter,这个有更多的信息吗? :-) - IrishChieftain
@hunter 是的,我不知道它被重置了。 - IrishChieftain
如果你触碰了 Session 中的一个项目并且它被设置为过期,它将会重置它的计时器。检查它是否等于 null 将导致它重置。 - hunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接