如果找不到本地存储,则重定向到登录页面

时间:2019-02-28 06:09:02

标签: javascript jquery local-storage

目标是如果未找到用户注销或localStorage,则应自动重定向到登录页面,并将注销同一浏览器中所有打开的选项卡。如果用户按下注销按钮,它将重定向到登录页面,否则,如果用户手动清除浏览历史记录(此时localStorage似乎为空),它将自动重定向到登录页面。如果使用单个选项卡打开以下代码,并且他删除了浏览器历史记录(localStorage为空),则以下代码不起作用。有任何建议吗?

function signOutAllTab() {
    var allTabLogOut = 'allTabLogOut';
    try {
        localStorage.setItem(allTabLogOut, allTabLogOut);
        //localStorage.removeItem(allTabLogOut);
        return true;
    } catch (e) {
        return false;
    }
}

window.addEventListener('storage', function (event) {
    if (event.key == 'logout-event') {
        window.location = 'signin?logoutAllTabs=yes';
    }
}, false);

$(document).ready(function () {
    if (signOutAllTab() && signOutTabs) {
        $('#allSignOut').on('click', function () {
            localStorage.setItem('logout-event', 'logout');
            return true;
        });
        setInterval(function () {
            if (!localStorage.getItem("allTabLogOut"))
                localStorage.setItem('logout-event', 'logout' + Math.random());
        }, 1000);
    }
}); 

关于

Sasi

1 个答案:

答案 0 :(得分:0)

单个选项卡不起作用是因为,当同源页面的页面修改本地存储时,其余同源页面在注册后立即触发存储事件。就像一个标签正在注视其他标签的更改一样。如果您想要单键手表本身,则可以这样编写代码:

 var orignalremoveItem = localStorage.removeItem;
    localStorage.removeItem = function(key,newValue){
        var removeItemEvent = new Event("removeItemEvent");
        removeItemEvent.key = key;
        window.dispatchEvent(removeItemEvent);
        orignalremoveItem.apply(this,arguments);
    };
    window.addEventListener("removeItemEvent", function (e) {
        if(localStorage.getItem("token")){
            if(e.key=='token'){
                alert("token,delete success");
            }
        }else{
            alert("no token")
        }
    });
    localStorage.removeItem('token');

步骤1:  enter image description here

步骤2: enter image description here

第3步: enter image description here

步骤4: enter image description here