【问题标题】:session logout from all browsers/devices从所有浏览器/设备中注销会话
【发布时间】:2015-11-16 05:15:40
【问题描述】:

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

<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 会在任何地方破坏会话,并且用户将退出所有其他设备,我需要设置任何其他设置吗?还是我错过了什么?

【问题讨论】:

  • 如果您使用多个浏览器打开站点,则会为来自浏览器的每个请求创建一个新会话,它将创建许多不同的会话。您需要将所有会话用户信息存储在数据库表中的某处,并在注销时检查用户 ID 并删除所有会话
  • 不同设备和浏览器不共享会话。我能想到的唯一方法是将登录状态保存在每个设备都可以检查的数据库中。

标签: php session cookies logout


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 2013-06-06
    • 2017-05-02
    • 2018-06-30
    • 2022-10-09
    • 2020-05-10
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多