【发布时间】:2015-04-27 16:25:32
【问题描述】:
我的主要目标和实际场景:如果两个用户共享相同的凭据,那么第二个用户无法登录系统,直到第一个已经登录的用户退出系统。
实际上,当用户关闭浏览器窗口时,我想在服务器数据库上设置login_flag=0。我在
$(window).on('unload', function(){ // ajax here with async:false });
或
$(window).on('beforeunload', function(){ // ajax here with async:false });
一切正常。但在 Chrome 中,它会记录以下消息:
主线程上的同步 XMLHttpRequest 已被弃用,因为 其对最终用户体验的不利影响。如需更多帮助, 检查http://xhr.spec.whatwg.org/。
我再次用谷歌搜索了相同的内容,发现在卸载事件中使用 Ajax 令人沮丧,并从here 找到以下详细信息
简而言之,他们反对将 ajax 与 async:false 与 window.unload 或 window.beforeUnload 方法一起使用。如果我从 Ajax 中删除 async 参数,则它不会按预期工作。
如果我想在用户关闭浏览器窗口的情况下在服务器端进行一些活动,那么正确的方法是什么?
【问题讨论】:
-
不确定当用户关闭选项卡/窗口时是否有任何适当的方法可以执行操作。在您的情况下,如果我很好地理解您要做什么,您可能希望有一个“last_activity”日期时间并这次定期更新。这样您就可以知道用户在过去 X 分钟内是否处于活动状态,并考虑他是在线还是离线。
-
您无法可靠地检测到用户何时关闭了浏览器窗口。有各种因素可能导致请求无法发送到服务器。你最好有某种状态,通过服务器上的用户活动保持活动状态,当你在一段时间内没有收到用户的消息时,然后将它们注销
-
正如我之前所说,请彻底解决问题。在将其标记为重复之前。
标签: javascript php jquery ajax browser-close