Yii2:用户更改密码后从所有浏览器注销

Md.*_*ain 5 php session change-password yii2

我想在更改当前密码时从所有浏览器中注销用户.在将新的passowrd保存到数据库之后,我已将代码放入我的控制器函数中:

$session = Yii::$app->session;
unset($session['id']);
unset($session['timestamp']);
$session->destroy();
Run Code Online (Sandbox Code Playgroud)

它仅适用于我更改密码的浏览器.但不适用于所有浏览器.我检查了会话变量 - $session['id']是否存在.即使我从不同的浏览器更改密码,我也可以看到它存在于其他浏览器中.

Ins*_*ull 0

这当然是可能的,使用session_id. 当用户在其他地方登录时,您可以在为新登录启动新会话之前执行此步骤:

// The hard part: find out what $old_session_id is
    $session = Yii::$app->session;
    unset($session['old_id']);
    unset($session['timestamp']);
    $session->destroy();


// Now proceed to create a new session for the new login
Run Code Online (Sandbox Code Playgroud)

这将破坏服务器端的旧会话,因此当另一台计算机再次访问您的应用程序时,它将尝试访问不存在的会话,并为其创建一个新会话(其中用户不再登录) 。

困难的部分是找出“旧”会话的 ID 是什么。没有一种万能的方法可以做到这一点。您需要有某种机制才能知道 id XXX 的会话属于现在登录的同一用户。如果您使用数据库会话,这应该很容易。

我可以想象您可以通过使用自己的会话处理来做到这一点。如果您将会话存储在数据库中。