所有 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 并删除所有会话
我有一个维护用户及其个人资料的网站,一旦用户登录,他就会看到这个注销按钮。
<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 并删除所有会话