当用户关闭浏览器时,Asp.net释放打开的文件

时间:2013-11-20 03:57:26

标签: asp.net vb.net session

我正在ASP.net上打开一个文件进行编辑,直到会话因各种原因而结束。    当用户从会话注销时,我关闭打开的文件(来自Session变量),以便其他用户可以访问它。只要用户手动注册或会话时间到期,它就可以正常工作。      问题是,当用户在没有“Signout”链接的情况下关闭浏览器时,没有从Global.asax文件调用Session_End函数。    可能还有其他情况,如网络断开,浏览器崩溃,系统关闭等。

这是我在Global.asax文件中的代码

  Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when a session ends. 
        ' Note: The Session_End event is raised only when the sessionstate mode
        ' is set to InProc in the Web.config file. If session mode is set to StateServer 
        ' or SQLServer, the event is not raised.
       ' Code the close the File which is being stored in Session
     End Sub

我正在寻找这些解决方案

  • 当用户关闭浏览器时如何调用“Session_End”函数。
  • 或者稍后如何访问“未闭合的”会话变量以释放它们。

2 个答案:

答案 0 :(得分:0)

当您处理Web服务(或任何其他非托管资源)上的文件时,最好不要将它们保持打开状态。您无法处理问题中提到的某些断开连接。

最好打开文件,完成所需的工作并立即关闭它而不保持打开状态。下次你必须再次访问它时,打开,完成工作并关闭。

答案 1 :(得分:0)

很遗憾,当用户关闭浏览器时,无法触发Session_OnEnd;只是因为ASP.NET没有意识到这已经发生了,并且依赖于会话超时(它将在一段时间之后执行,默认为20分钟后)。

我认为在您的方案中,您可能希望使用JavaScript来提醒/阻止用户关闭当前窗口。试试这个(来自另一个StackOverflow答案): -

javascript detect browser close tab/close browser

希望有所帮助