zoukankan      html  css  js  c++  java
  • 浏览器关闭/标签页全部关闭,退出登录状态

    实现效果:1浏览器关闭/标签页全部关闭/点击退出按钮,退出登录状态。2、浏览器同时只能登录一个账号,登录一次后,其他标签页打开全部进入首页。

     分析:

    1. 在登录成功后保存账号相关信息。
    2. 打开标签页浏览器执行onload事件方法,刷新页面执行onbeforeunload ——》onload事件方法,关闭浏览器和关闭标签页执行onbeforeunload 事件方法。
    3. 难点:浏览器并未提供单独关闭浏览器和关闭标签页的方法。
    4. 解决方案:利用onbeforeunload onload事件的执行顺序,在onload事件方法里清除账号信息,退出登录。

    运行分析:

    1):首次打开页面执行onload方法,如果第一次打开,localTime,sesTime,numbers都没有值,执行第一个If语句,清除localStoragesessionStorage的值,重新给localTime,sesTime赋值,numbers++,此时numbers=0

    2):刷新页面先执行onbeforeunload 方法,当前localTime,sesTime有值且相等,numbers--,此时numbers=0;然后再执行onload方法。此时localTime,sesTime有值,numbers++,此时numbers=1;

    3):再次打开新的标签页,执行onload方法,此时localTime有值并且numbers=1,执行第二个if语句,给sesTime赋值。numbers++,此时numbers=2;

     代码:

    //刷新页面时,首先进入onbeforeunload 方法

    window.onbeforeunload = () => {

      let numbers = window.localStorage.getItem('numbers');

      const sesTime = window.sessionStorage.getItem('sesTime');

      const localTime = window.localStorage.getItem('localTime');

      //当localTime 没有值,并且sesTime === localTime,减去当前页。

      if (localTime != 'NaN' && localTime != null && sesTime === localTime) {

        numbers = parseInt(numbers) - 1;

        window.localStorage.setItem('numbers', numbers)

      }

    };

    window.onload = () => {

      let time = '';

      let numbers = window.localStorage.getItem('numbers');//计算打开的标签页数量

      const sesTime = window.sessionStorage.getItem('sesTime');

      const localTime = window.localStorage.getItem('localTime');//首次登录的时间

    //当numbers无值或者小于0时,为numbers 赋值0

    if (numbers == 'NaN' || numbers === null || parseInt(numbers) < 0) {

      numbers = 0;

    }

    //sesTime || localTime 没有值,并且numbers为0时,清除localStorage里的登录状态,退出到登录页面

    if ((sesTime === null || sesTime === 'NaN' || localTime === null ||

    localTime === 'NaN') && parseInt(numbers) === 0) {

    localStorage.clear();

    sessionStorage.clear();

    //为localTimesesTime赋值,记录第一个标签页的时间

    time = new Date().getTime();

    window.sessionStorage.setItem('sesTime', time);

    window.localStorage.setItem('localTime', time);

    router.push('/login');

    }

    //当time localTime 有值,并且sesTime != localTime时,为sesTime赋值

    if (!time && localTime != 'NaN' && localTime != null && sesTime != localTime) {

      window.sessionStorage.setItem('sesTime', localTime);

    }

    //最后保存当前是第几个标签页

    numbers = parseInt(numbers) + 1;

    window.localStorage.setItem('numbers', numbers);

    };

     

  • 相关阅读:
    文本建模、文本分类相关开源项目推荐(Pytorch实现)
    自然语言推断(NLI)、文本相似度相关开源项目推荐(Pytorch 实现)
    20155312 张竞予 Exp9 Web安全基础
    20155312 张竞予 Exp 8 Web基础
    20155312 张竞予 Exp7 网络欺诈防范
    20155312 张竞予 Exp6 信息搜集与漏洞扫描
    20155312 张竞予 Exp5 MSF基础应用
    20155312 张竞予 Exp4 恶意代码分析
    20155312 张竞予 Exp3 免杀原理与实践
    20155312 张竞予 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/miam/p/11387779.html
Copyright © 2011-2022 走看看