我有退出选项,这是我的代码:
session_start();
session_destroy();
setcookie("key","",time()-60*60*24);
setcookie("username","",time()-60*60*24);
我想添加另一个选项以从所有会话退出(在另一台设备上) 例如,如果用户更改了密码,则清除该用户的所有会话并从所有用户注销。
如何在所有设备上编辑所有会话? 我可以将会话ID存储到数据库,并使用会话密钥更改数据吗? (不是当前用户)
答案 0 :(得分:2)
您可以将datetime字段添加到名为session_expires_at
的用户表中。在每个页面加载时,将当前日期/时间与session_expires_at
进行比较。如果已过期,请将其注销。当用户点击"退出所有会话"时,只需将该字段设置为now()
。
如果没有心跳(ajax或socket.io类型的东西),你不能强制从服务器端更改页面。它必须在页面加载时发生。
答案 1 :(得分:1)
此处最好的选择是创建自己的数据库库session handler。
您可以对会话所做的事情有很多控制权。有一篇很好但却过时的文章here,展示了如何做到这一点的一个例子。
答案 2 :(得分:-1)
php有命令使用以下命令销毁所有会话:
ini_set('session.gc_max_lifetime', 0);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
第一行用于将会话的生命周期值固定为等于0秒。然后,将概率设置为100%清理。
如果您需要销毁特定用户,可以将以下说明添加到会话处理程序:
if ($_SESSION['username'] == 'user to delete') {
session_destroy();
}