2011-03-28 71 views
9

我想弄清楚如何摧毁一个ASP.NET会话时,用户导航离我的site.I使用Global.ascx应用程序文件并使用session_end事件。点击注销按钮。但是,当我直接关闭浏览器20分钟后不使用全局文件。我在web.conig文件作为<sessionState mode="InProc" timeout="20"></sessionState>
请帮我
奥古斯丁会话处理在asp.net

回答

7

会话超时定义当一些会议将一些闲置的时间后销毁终止会话。

如果您想要更好地控制会话,您需要使用SQLServer模式,状态服务器模式或自己定制的模式。

我的意思是,因为,例如,SQLServer模式将会话存储在标准SQL Server表中,因此,您可以实现一些SQL Server作业,或者在Windows或某些Windows服务中安排某些任务,以便可以清理根据您的需要开启会议。

顺便说一句,也许你需要知道,如果你使用InProc,你的会话可能会被破坏,因为IIS回收应用程序池或服务器完全重新启动。这不是结束会话,所以适用的事件和处理程序在这种情况下不起作用。

我再说一遍,如果您需要更好的会话管理模式,就像我建议您的那样。


编辑:

查看本页面: http://aspalliance.com/520_Detecting_ASPNET_Session_Timeouts.2

您将学习如何处理会话超时更好,因为当会话过期Session_End中不叫,但是当你调用“ Session.Abandon”。

+0

+1:一个非常好的教程马蒂亚斯。 – Kamyar 2011-03-28 08:00:57

+0

谢谢。但我没有编写这个教程! :D – 2011-03-28 08:03:45

+0

我知道。但感谢分享:) – Kamyar 2011-03-28 08:05:17

1

您可以通过调用Session.Abandon()

+0

我使用Session.abandon和明确的(),但是,我的问题是,如果我们关闭浏览器它不工作... – augustine 2011-03-28 07:36:36

3

当访问者“导航”或“关闭浏览器”时,浏览器不会向网站发送信号。所以asp.net(或任何其他服务器端技术)不能对此做出反应以销毁会话。

这就是为什么会话在超时时间内工作的原因:如果用户在超时时间内没有执行请求,那么他应该已经放弃了会话,即使他刚刚阅读该页面超过20分钟。

3

使用RegisterClientScriptBlock创建一个调用页面加载session.End并关闭页面(Window.Close())的新页面。在使用Javascript卸载当前页面时调用此新页面window.Location。

4

可以使用INPROC模式的SQLServer模式instread