我正在ASP.net上打开一个文件进行编辑,直到会话因各种原因而结束 . 当用户从会话注销时,我关闭打开的文件(来自Session变量),以便其他用户可以访问它 . 只要用户手动注册或会话时间到期,它就可以正常工作 . 问题是,当用户在没有“Signout”链接的情况下关闭浏览器时,没有从Global.asax文件调用Session_End函数 . 可能还有其他方案,如Net disconnect,浏览器崩溃,系统关闭等 .
这是我在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"函数 .
-
或者稍后如何访问"unclosed" Session变量以释放它们 .
2 回答
在Web服务(或任何其他非托管资源)上处理文件时,最好不要将它们保持打开状态 . 您无法处理问题中提到的某些断开连接 .
最好打开文件,完成所需的工作并立即关闭它而不保持打开状态 . 下次您必须再次访问它时,打开,完成工作并关闭 .
遗憾的是,当用户关闭浏览器时,无法触发Session_OnEnd;只是因为ASP.NET没有意识到这已经发生了,并且依赖于会话超时(它将在一段时间后执行,默认为20分钟后) .
我认为在您的场景中,您可能希望使用JavaScript来提醒/阻止用户关闭当前窗口 . 试试这个(来自另一个StackOverflow答案): -
javascript detect browser close tab/close browser
希望有所帮助