我有一个类似$_SESSION['login']
的会话,当它与1
相等时,就意味着使用会记录到我的网站中:
if ( $_SESSION['login'] == 1 ) {
// You are logged
} else {
// login/register
}
此外,我还有另一个包含用户ID的会话。像这样:
echo $_SESSION["Id"];
/* It is containing the user's id (an integer number).
Something like: 234124
*/
现在我想为具有特定ID的用户取消设置$_SESSION['login']
。例如,我想unset($_SESSION['login'])
为$_SESSION["Id"] = 234124
。我怎么能这样做?
编辑:我尝试做的一切:当用户更改密码时,我会从cookies
表中删除所有Cookie,以便从其他所有设备中签出。我也想删除他的会话。
答案 0 :(得分:3)
如果我理解你的权利,你想要完全退出用户,即从所有会话(从笔记本电脑,手机等)注销。
只有当你有一个映射user_id => session_id
和2)时才能以某种方式查询会话。例如,当您在数据库表中存储会话,并且在此表中将user_id作为列时,您可以简单地删除用户的所有会话(或者只是修改它们)。
但是使用默认的PHP会话处理程序是不可能的。您没有这种类型的映射。
我建议您编写将会话存储在数据库表中的a custom session handler。要构建映射,您可以覆盖write
method并在那里提取user_id
。注意序列化数据,注意session.serialize_handler
configuration directive。
例如,
的php.ini
session.serialize_handler = php_serialize
会话处理程序
public function write($id, $data)
{
$content = unserialize($data);
return $this->db->insert('sessions', [
'id' => $id,
'user_id' => $content['user_id'],
'data' => $data,
]);
}
和控制代码
if (...) {
$db->execute('DELETE FROM sessions WHERE user_id = ?', $userId);
}