所有 browsers/devices 的会话注销

session logout from all browsers/devices

我有一个维护用户及其个人资料的网站,一旦用户登录,他就会看到这个注销按钮。

<a href="<?php echo PSF::urlFor('logout');?>" class="link" id="position">Logout</a>

这个进入这个函数

 else if($page == 'logout')//when logout occures
        {

            PSF::userLogout(true);


            /**
             * Need to remove twitter session too.
             */

            if(isset($_SESSION['tw_access_token'])){
                unset($_SESSION['tw_access_token']);
            }

            PSF::redirectTo('default_home');                
        }

它注销用户并重定向到主页, PSF::userlogout 函数看起来像这样

 final static public function userLogout($compleLogout = false) 
    {

        if (empty(self::$_userStack)) 
        {
            return false;
        }
        if ($compleLogout) 
        {

            self::$_userStack = array();
            self::requestRemoveCookie('PSF_CookieLogin');
        } 
        else 
        {

            array_pop(self::$_userStack);
        } 

        self::userFlushCache();

        return PSF::sessionSet('__PSF_SYSTEM_CurrentUser_Stack', self::$_userStack);
    }

它正在获取正在使用浏览器的当前用户,并销毁他们的会话和 cookie 并将它们成功注销,但仅从当前浏览器,如果我在多个浏览器上并行打开同一个帐户,它只会结束会话在一个浏览器上,并继续在另一个浏览器上登录。我认为删除会话和 cookie 会破坏所有地方的会话,用户将从所有其他设备注销,是否需要设置任何其他设置?还是我错过了什么?

如果您使用多个浏览器打开站点,则会为来自浏览器的每个请求创建一个新会话,它将创建那么多不同的会话。您需要将所有会话用户信息存储在数据库 table 中的某个位置,并在注销时检查用户 ID 并删除所有会话