AJAX函数用于检测会话何时过期并注销

时间:2018-03-03 12:34:06

标签: javascript php jquery ajax codeigniter

我有这个功能,检查当前标签中的会话是否已过期。但是,如果我打开另一个选项卡并通过那里注销,我当前的选项卡不会知道并以某种方式保持其会话,直到我从导航菜单访问一个项目。有没有办法通过检测用户何时注销或用户会话是否已过期来改进这一点?

现在的主要问题是,如果他们打开另一个标签,只是从那里退出。

function check_if_logged_in(){
    $.ajax({
        method: "POST",
        url: "<?php echo site_url('Common/CheckSession'); ?>",
        beforeSend: function () {
            $('.loading').show();
        },
        success: function(data){
            if(data==="undefined"||data===null||data===0){
                console.log("logged out");
//                window.location.replace("<?php // echo BASE_URL;?>");
            }else{
                console.log("logged in");
            }
            $('.loading').fadeOut("slow");
        },
    });
}

这是我的checkSession函数

public function checkSession(){
        if($this->logged_in()===false){
            echo false;
        }else{
            echo true;
        }
    }

this-&gt; logged_in()只检查会话是否仍处于活动状态。

我已阅读HTML5的LocalStorage。我想知道这是否会影响移动设备,因为网站本身就是响应式的,而且我听说iOS或某些设备不支持LocalStorage。

1 个答案:

答案 0 :(得分:0)

您应该编写一个可以在每个文件中访问的js函数。最有可能在你的页脚中。

然后编写以下代码,每隔5秒钟调用一次(您可以根据自己的方便进行更改)。

 $( document ).ready(function() {
    setInterval(function () {
        checkSession();
    }, 5000);
});


function checkSession()
{
    $.ajax({
        type: "POST",
        url: "your_session_checking_function",
        success: function (data) {
            data = JSON.parse(data);
            if(data.response != "true")
            {   
                window.location.href = 'redirect to login page';  
            }
        }
    });
}

然后根据ajax成功获得的结果,您可以将其重定向到登录页面。