vue实现长时间无操作自动返回登录页

本文介绍了一种在Vue.js应用中实现用户在一分钟内无操作自动登出的功能。通过使用Vuex来管理最后操作时间,并利用定时器实时更新当前时间,从而判断是否达到设定的一分钟无操作时长。此外,还介绍了如何通过postMessage机制让子iframe页面与父页面进行通信,以确保整个系统的自动登出功能完整实现。
摘要由CSDN通过智能技术生成

需求

实现系统一分钟无操作,自动退出登录。

系统大致框架

一个父级系统,用iframe嵌套了一个子级系统。

主要实现思路

将最后一次操作时间lastTime存放在vuex中,当前时间currentTime实时更新。
即时判断 当前时间currentTime 减去 最后一次操作时间lastTime 的值是否大于一分钟。

第一步

在vuex中定义lastTime,并写好对应的方法。
在这里插入图片描述

第二步

实时更新当前时间,先在data中定义。

data() {
    return {
      timer: "", //定时器
      currentTime: new Date().getTime(),//得到的是毫秒值
      timeOut: 60 * 1000, //设置过期时间
    };
  },

需要用到定时器

created() {
    this.$store.commit("updateLastTime");//更新最后一次操作时间
    var vm = this;//防止this指向改变
    vm.timer = setInterval(() => {
      //定时修改currentTime的值
      vm.currentTime = new Date().getTime();
    }, 1000);
  },

记得销毁定时器

beforeDestroy() {
    if (this.timer) {
      clearInterval(this.timer); // 在Vue实例销毁前,清除我们的定时器
    }
  },

第三步

监听currentTime,实时与lastTime比较

watch: {
    currentTime: function (newVal) {
      if (newVal - this.$store.state.lastTime > this.timeOut && this.$router.currentRoute.path != '/') {
        this.$message.warning("登录信息已过期,请重新登录");
        setTimeout(() => {
          this.$router.push({ path: "/" });
        }, 300);
        this.$store.commit("updateLastTime");
      }
    },
  },

页面被点击,就更新最后操作时间。
在这里插入图片描述
在这里插入图片描述
到此,完成了父级系统一分钟无操作自动退出。
但是我们还有一个iframe子系统。
这里涉及到iframe子页面与父页面的通信
我采用postMessage,因为允许跨域。

第一步

子页面被点击,就向外发出信息。
在这里插入图片描述

第二步

父页面接收信息。

mounted() {
    //监听iframe变化
    window.addEventListener("message", (eve) => {
      //接收到信息,就改变最后操作时间
      this.$store.commit("updateLastTime");
    });
  },

到此,这个需求就实现了。

----------------------这是一条华丽的分割线--------------------------------
码字不易,你们的点赞就是我更新的最大动力!
在这里插入图片描述

Vue应用部署到Nginx时,为了实现面刷新后自动更新浏览器缓存,你需要配置Nginx的静态文件缓存策略和ETag头信息。以下是基本的步骤: 1. **清除默认缓存设置**: - 在Nginx的server block里(通常是`location /`),移除或注释掉默认的缓存过期时间,例如 `add_header Cache-Control "no-cache, no-store, must-revalidate";` 和 `expires 0;`。 2. **启用强缓存**: - 添加 `add_header Cache-Control "public, max-age=31536000";` 来设置资源有一个较长的公共缓存周期,例如一年。这会告诉浏览器在一年内如果没有更新的情况下直接从缓存加载内容。 3. **使用ETag头**: - 添加 `add_header ETag '"$filemtime"';`,这会在响应头部添加文件修改时间作为ETag值,浏览器可以根据这个值判断文件是否已经改变。 4. **Vary header**: - 如果应用的内容可能因用户的某些属性(如登录状态)而变化,应加上 `add_header Vary "Accept-Language, Accept-Encoding, Cookie";`,以防止单用户缓存所有用户的资源。 5. **URL哈希(URL Rewrites)**: - 可以考虑使用预发布版本的URL(如`/v2`),并在新版本发布时更改URL,而不是直接更新服务器文件。Nginx可以设置一个规则,如`if_modified_since`,当浏览器请求已经被缓存的内容时,如果文件未更改,则返回304 Not Modified,避免下载新内容。 ```nginx location / { try_files $uri $uri/ =404; add_header Cache-Control "public, max-age=31536000"; add_header ETag '"$filemtime"'; add_header Vary "Accept-Language, Accept-Encoding, Cookie"; if_modified_since off; } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个喜欢弹吉他的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值