可能重复:
当用户关闭浏览器而不单击注销时销毁或取消设置会话
我正在为我的客户实现一个聊天脚本。我面临的问题是,如果用户注销,我可以编程将他的聊天状态结束为离线,因为用户登录时状态设置为 1,但我很困惑,如果用户关闭浏览器怎么办无需注销。在这种情况下,数据库中的状态保持为 1,因为用户尚未注销。
希望你明白这个问题。请帮忙。
可能重复:
当用户关闭浏览器而不单击注销时销毁或取消设置会话
我正在为我的客户实现一个聊天脚本。我面临的问题是,如果用户注销,我可以编程将他的聊天状态结束为离线,因为用户登录时状态设置为 1,但我很困惑,如果用户关闭浏览器怎么办无需注销。在这种情况下,数据库中的状态保持为 1,因为用户尚未注销。
希望你明白这个问题。请帮忙。
假设您正在使用基于 cookie 的会话,请非常积极地设置超时。
http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime
您还可以通过 JavaScript 连接到浏览器的卸载事件,并触发对您的服务器的快速 AJAX 请求,从而破坏会话。
http://eureka.ykyuen.info/2011/02/22/jquery-javascript-capture-the-browser-or-tab-closed-event/
不过,我不会依赖这个客户端实现——如果浏览器崩溃,或者用户强制关闭它,那可能不会触发事件。考虑到用户,浏览器本身也可能会限制onunload
事件完成的时间。这两种方法的组合可能是最有效的。
当会话 cookie 过期或一段时间不活动后,在数据库中设置用户脱机。
您可以对每个请求进行检查。