Gow*_*rav 5 php session logout redis yii2
我想从同一用户的当前会话中注销登录到不同浏览器/环境的用户会话.与此类似的功能 - https://www.facebook.com/settings?tab=security§ion=sessions&view.
Yii2是使用的后端框架.使用redis进行会话管理 - yii2-redis.我还保存了保存在数据库中的会话ID.
但没有任何成功.
session_id($old_session_id);
session_start(); // This line throws error.
session_destroy();
Run Code Online (Sandbox Code Playgroud)
使用redis删除密钥\Yii::$app->session->destroySession($oldSessionId)没有注销.
将会话ID更改为旧会话ID然后销毁会话也不起作用.
$currentSessionId = \Yii::$app->session->getId();
\Yii::$app->session->setId($oldSessionId);
\Yii::$app->getSession()->destroy();
\Yii::$app->session->setId($currentSessionId);
Run Code Online (Sandbox Code Playgroud)
如果有人成功实现了这一点,请分享您的解决方案.如果有任何关于此的文件可以提供帮助,请提供.
第一个,session_start()必须之前调用session_id()并且只调用一次
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
session_id($old_session_id);
session_destroy();
Run Code Online (Sandbox Code Playgroud)
但仅仅删除会话,如果允许用户自动登录,这还不够,因为浏览器会使用cookie自动登录。要解决此问题,您必须更改用户AuthKey- Yii2 使用AuthKey来验证用户自动登录。默认情况下,每个用户在用户表中只有一个AuthKey,因此当您AuthKey在任何地方更改用户时都会注销。所以我们必须定制。为每个用户会话创建一个AuthKey,存储在用户表之外的某个位置。简单点:扩展 yii\web\User 类覆盖函数来为每个登录会话afterLogin创建。AuthKey覆盖validateAuthKey函数来验证自动登录使用我们的自定义AuthKey。现在,当您想要终止任何用户会话时:终止 PHP 会话 id,AuthKey该会话将立即注销。我一直在我的项目中使用这个解决方案,并且效果很好。
| 归档时间: |
|
| 查看次数: |
4746 次 |
| 最近记录: |