繁体   English   中英

在浏览器关闭时结束 Session?

[英]Ending Session on Browser close?

我想在用户关闭 web 浏览器后立即用我的网站刷新用户的 session。 我该如何实现呢?

这并不容易,因为 http 是无状态的。 因此,当浏览器关闭时,您没有打开的连接。 没有办法保证工作。 可能会断开连接,或关闭 go 电源,这将使任何“onClose”事件都不可靠。

您可以在一定量的不活动后超时会话。 但是,不能保证用户不只是去吃午饭,并且在返回时想要一个打开的 session。

如果您担心指示人们离线,您可以在 ajax 中进行一些轮询,以保持会话处于活动状态并销毁超过轮询间隔未使用的会话。 但是,如果您只是担心资源,我猜这弊大于利。

onbeforeunload()事件中调用 ajax 并调用:

Session.Abandon();

当用户关闭 window 或离开页面时,您没有在服务器端触发任何事件,您可以使用会话超时来检查它,然后确保 session 不会死于空闲用户,这可能是在浴室,或制作咖啡,用 AJAX 左右验证它。

MakeDummyRequest(); // with a simple http request, you can keep your session alive.

正如其他人指出的那样,您最好的选择可能是进行 Ajax 调用,这将使 session 保持活动状态。 如果您保持精简,此调用可能会以较快的间隔发生。 然后你可以使用某种 session 超时算法。

话虽如此,有几点需要注意。 您可能希望在协议中构建一种方法来强制用户注销应用程序。 想象一下,一个用户登录到您的应用程序,他周末回家时没有关闭他的计算机。

在周末,您进行了部署,这将使所有 ajax 通信无效,因为您修改了协议或其他内容。 除非您强迫他退出,否则他将继续登录,并且在他周一早上来时可能会出错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM