如何在浏览器多个选项卡中处理用户注销?

时间:2014-02-11 03:42:07

标签: javascript php codeigniter session

我正在使用codeigniter会话来存储用户登录信息。当用户在多个选项卡中打开时,在一个选项卡中注销时,我希望在用户访问其他选项卡时自动刷新页面。这可能吗?

2 个答案:

答案 0 :(得分:9)

刚刚测试过,我能看到的最简单的方法(至少在Chrome中可以使用,但可能需要进一步测试)是设置cookie。

注销时执行setcookie('loggedout',1)之类的操作。您还需要在登录时执行相反的操作 - unset($_COOKIE['loggedout'])

然后你只需要一些简单的Javascript ......

function readCookie(name) {
    var nameEQ = escape(name) + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) === ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) === 0) return unescape(c.substring(nameEQ.length, c.length));
    }
    return null;
}
window.setInterval(function() {
    if(readCookie('loggedout')==1) {
        window.location.assign('loggedout.html')
        //Or whatever else you want!
    }
},1000)

那将检查每一秒以查看cookie是否已设置。魔法。

答案 1 :(得分:1)

以下是我的下面代码来解决这个问题。我在登录时设置了cookie并在注销时删除了。在Logout和登录时也是反之亦然。

脚本:

function readCookie(name) {
var nameEQ = escape(name) + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) === ' ') c = c.substring(1, c.length);
    if (c.indexOf(nameEQ) === 0) return unescape(c.substring(nameEQ.length, c.length));
}
return null;
}

function setCookie(cname,cvalue,exdays)
{
var d = new Date();
d.setTime(d.getTime()+(exdays*24*60*60*1000));
var expires = "expires="+d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires;
} 

window.setInterval(function() {
if(readCookie('loggedout')==1) {

    window.location.reload();

   setCookie('loggedout',2,3);
    //Or whatever else you want!
}
 else if(readCookie('loggedin')==1) {

    window.location.reload();

   setCookie('loggedin',2,3);
    //Or whatever else you want!
}
},2000)

控制器:

登录:

$this->load->helper('cookie');
    $cookie = array(
'name'   => 'loggedin',
'value'  => '1',
'expire' => '86500'
);
set_cookie($cookie);
$domain= preg_replace("/^[\w]{2,6}:\/\/([\w\d\.\-]+).*$/","$1", $this->config->slash_item('base_url')); 
$path = explode($domain,base_url());
delete_cookie('loggedout');
    delete_cookie('loggedout',$domain, $path[1] ); 

注销:

$cookie = array(
'name'   => 'loggedout',
'value'  => '1',
'expire' => '86500'
);
set_cookie($cookie);
$domain= preg_replace("/^[\w]{2,6}:\/\/([\w\d\.\-]+).*$/","$1", $this->config- >slash_item('base_url'));
$path = explode($domain,base_url());
delete_cookie('loggedin');

delete_cookie('loggedin','localhost', '/<!-- Your path -->/'); 

delete_cookie('loggedin',$domain, $path[1] );