5

我有一个注销选项,这是我的代码:

session_start();

session_destroy();

setcookie("key","",time()-60*60*24);

setcookie("username","",time()-60*60*24);

我想添加另一个选项以从所有会话(在另一台设备上)注销,例如,如果用户更改了密码,则该用户的所有会话都将被清除并从所有会话中注销。

如何在所有设备上编辑所有会话?我可以将会话 ID 存储到数据库,并使用会话密钥更改数据吗?(不是当前用户)

4

3 回答 3

2

您可以将日期时间字段添加到名为 的用户表中session_expires_at。在每次页面加载时,将当前日期/时间与session_expires_at. 如果它已过期,请将其注销。当用户单击“从所有会话中注销”时,只需将该字段设置为now().

如果没有心跳(ajax 或 socket.io 类型的东西),您不能强制页面从服务器端更改。它必须在页面加载时发生。

于 2013-06-10T19:21:11.140 回答
1

最好的办法是创建您自己的数据库基础会话处理程序

然后,您将对会话可以做什么有很大的控制权。这里有一篇不错但过时的文章,展示了如何做到这一点的示例

于 2013-06-10T19:22:53.813 回答
-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();
 }
于 2013-06-10T19:21:37.593 回答