访问会话结束?

时间:2012-02-06 23:06:44

标签: asp.net session-timeout

我试图在用户处于非活动状态或会话结束时强行“记录”(通过不活动或更重要的是,当浏览器关闭时)。 我不想使用任何愚蠢的AJAX解决方案每隔几分钟为“im alive”执行帖子,或者在浏览器关闭时调用。

我的印象是,如果您在Session中存储对象,并且您到达Session_End事件,那么您将无法访问Session中存储的任何内容。 但是从我做过的一些测试来看,这似乎是你获得对象访问权的最后机会。

这可能是真的吗?它可靠吗?

在这里使用ASP.NET 4.0。

2 个答案:

答案 0 :(得分:3)

通常会做两件事。

首先是javascript计时器被添加到客户端,而不是作为心跳,而是作为提醒。如果他们接近会话结束,那么它只是说“会议即将结束。你还在吗?”如果是这样,那么它会做“愚蠢”的帖子以确保服务器保持会话进行。这纯粹对您的用户很好。

第二个(也就是你的问题的一点)是你在session_end中放了一些东西来清理会话。可靠?好吧.. 大多数的时间。

如果应用程序池被回收,则Session_End将不会运行。但是,假设应用程序池正常,则会在会话到期时执行。应用程序池可以回收的原因很多,从应用程序崩溃到超出内存使用,只是因为自上次重置以来已经有一段时间了。这可以在IIS中配置。

我会信任session_end吗?不,不是100%。当然,我不会在会话对象中放置任何需要我100%信任的会话对象。

答案 1 :(得分:0)

用于记录超时您可以使用全局事件在超时时记录。请参阅此链接了解活动顺序http://www.techrepublic.com/article/working-with-the-aspnet-globalasax-file/5771721