【问题标题】:session Handling in asp.netasp.net 中的会话处理
【发布时间】:2026-01-14 09:10:01
【问题描述】:

我试图找出当用户离开我的站点时如何销毁 ASP.NET 会话。我正在使用 Global.ascx 应用程序文件并使用 session_end 事件。当我单击注销按钮时它工作正常。但是当我直接关闭浏览器时,它不会在 20 分钟后使用全局文件。我在 web.conig 文件中使用 <sessionState mode="InProc" timeout="20"></sessionState>
请帮帮我
奥古斯丁

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    会话超时定义了一些会话在空闲时间后何时被销毁。

    如果您想对会话进行更多控制,则需要使用 SQLServer 模式、State Server 模式或自己定制的模式。

    我的意思是,例如,因为 SQLServer 模式将会话存储在一个标准的 SQL Server 表中,所以,你可以实现一些 SQL Server 作业,或者在 Windows 或一些 Windows 服务中安排一些任务,这样你就可以清理会议取决于您的需要。

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

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


    编辑:

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

    您将学习如何更好地处理会话超时,因为 Session_End 不会在会话到期时调用,而是在您调用“Session.Abandon”时调用。

    【讨论】:

    • 谢谢。但我还没有撰写本教程! :D
    【解决方案2】:

    当访问者“离开”或“关闭浏览器”时,浏览器不会向网站发送信号。因此,asp.net(或任何其他服务器端技术)无法对此做出反应以破坏会话。

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

    【讨论】:

      【解决方案3】:

      您可以在 inProc 模式中使用 SQLServer 模式

      【讨论】:

        【解决方案4】:

        创建一个新页面,该页面在页面加载时调用 session.End 并使用 RegisterClientScriptBlock 关闭页面 (Window.Close())。调用这个新的页面窗口。使用 Javascript 卸载当前页面的位置。

        【讨论】:

          【解决方案5】:

          您可以通过调用Session.Abandon() 来终止会话

          【讨论】:

          • 我使用 Session.abandon 和 clear() 但是,我的问题是如果我们关闭浏览器它不起作用...