需求:浏览器在关闭前需要先退出登录
问题:在关闭浏览器时登出的操作还没执行完就关闭了,如何在操作完后再关闭(谷歌不能修改浏览默认弹窗,没法做操作)
mounted(){
window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
window.addEventListener('unload', e => this.unloadHandler(e))
},
destroyed() {
window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))
window.removeEventListener('unload', e => this.unloadHandler(e))
},
methods:{
beforeunloadHandler(e) {
this._beforeUnload_time = new Date().getTime();
},
unloadHandler(e) {
this._gap_time = new Date().getTime() - this._beforeUnload_time;
//判断是窗口关闭还是刷新
if (this._gap_time <= 5) {
//如果是登录状态,关闭窗口前,移除用户
this.$store.dispatch('AGENT_LOGOUT')
}
}
}
换个思路:既然页面都关掉了,那登录状态就不要紧了,所以不用管就行了,人都没了,土葬和火化那都是后人的事情了。
什么?怕别人接着用这个电脑?
这个简单,每次进入网页的时候火速清空上次的登录信息就行了。
如果担心别人离线恢复持久化存储的数据——那这数据就不应该持久化存储。
什么?后端要统计登录时长?
浏览器弄了个叫做
sendBeacon
的接口就是干这个的。什么?
sendBeacon
成功率不是百分之百?既然要求这么高,不如考虑开一个
WebSocket
,后端监听它断掉的事件就知道确切的离线时间了。