目录
1. 监控用户操作
你需要监听用户的操作(例如鼠标移动、点击、键盘输入等),并在这些操作发生时重置计时器。
2. 设置计时器
使用 setTimeout
来创建一个计时器,在一小时内没有操作时触发自动退出登录功能。
3. 实现退出登录逻辑
在计时器触发时,执行自动退出登录的逻辑。
4.代码逻辑
<template>
<div>
<!-- Your application content -->
</div>
</template>
<script>
export default {
data() {
return {
timeout: null,
timeoutDuration: 3600000, // 1 hour in milliseconds
};
},
created() {
this.resetTimeout();
this.addEventListeners();
},
beforeDestroy() {
this.removeEventListeners();
if (this.timeout) clearTimeout(this.timeout); // Clean up timeout on destroy
},
methods: {
addEventListeners() {
window.addEventListener('mousemove', this.resetTimeout);
window.addEventListener('keypress', this.resetTimeout);
window.addEventListener('click', this.resetTimeout);
},
removeEventListeners() {
window.removeEventListener('mousemove', this.resetTimeout);
window.removeEventListener('keypress', this.resetTimeout);
window.removeEventListener('click', this.resetTimeout);
},
resetTimeout() {
if (this.timeout) {
clearTimeout(this.timeout);
}
this.timeout = setTimeout(() => {
this.logout();
}, this.timeoutDuration);
},
logout() {
var _this = this;
// 在这里执行退出登录操作,可以是清除用户信息、跳转到登录页面等
_this.$store.state.token="";
this.$router.push('/login'); }
}
};
</script>
<style>
/* Your styles here */
</style>
5.关键点
- 超时函数: 使用箭头函数 (
() => this.logout()
) 确保在计时器超时后调用logout
方法。 - 组件销毁: 在
beforeDestroy
钩子中清除计时器,避免组件卸载后仍执行计时器。 -
监听用户操作:
addEventListeners
方法添加了对mousemove
、keypress
和click
事件的监听,以便在用户活动时重置计时器。 -
重置计时器:
resetTimeout
方法在每次用户操作时清除之前的计时器并设置一个新的计时器。如果在指定的时间段内没有操作,计时器将触发logout
方法。 -
退出登录:
logout
方法执行退出登录的逻辑,比如清除用户的会话数据并重定向到登录页面。