【发布时间】:2019-06-09 11:55:57
【问题描述】:
我正在尝试为我的自定义 CRM 实施时间跟踪。基本想法是使用切换按钮,这样我就可以为该特定任务存储“start_time”和“end_time”,这两者之间的差异将代表所花费的时间。但是如果用户关闭浏览器或关闭 PC,是否有会话销毁事件,以便我可以在会话销毁后插入“end_time”?
【问题讨论】:
我正在尝试为我的自定义 CRM 实施时间跟踪。基本想法是使用切换按钮,这样我就可以为该特定任务存储“start_time”和“end_time”,这两者之间的差异将代表所花费的时间。但是如果用户关闭浏览器或关闭 PC,是否有会话销毁事件,以便我可以在会话销毁后插入“end_time”?
【问题讨论】:
你不能真的依赖 laravel 会话在过期时立即被删除,因为我相信它是基于一个彩票系统,每 100 个请求中就有 1 个清理会话。
我建议使用 ajax ping 来实现一些东西,这样您就可以知道当用户关闭浏览器时 ping 已经停止。真的没有其他方法可以知道用户是否关闭了浏览器。
【讨论】:
当窗口关闭时,会话不一定被销毁。你可以为onbeforeunload定义一些事件:
window.onbeforeunload = function(){
// Send a request to the server to notify it of the window being closed/refreshed
}
或者您可以按照 Flame 的建议进行一些轮询,但我认为这种方法不干净,因为它会产生一些人们希望避免的网络噪音。
您还可以建立一个双工通道,例如WebSocket 通道,这样您的服务器就会知道它什么时候坏了。
【讨论】:
onbeforeunload,我想知道它有多稳定,如果你能确保一个ajax-request确实在那里完成