如何杀死一个/所有php会话?

2022-08-30 14:35:23

我有一个非常基本的php会话登录脚本。我想强制注销某个用户或强制注销所有用户。

如何读取对我的网站进行的所有会话,并销毁部分或全部会话?


答案 1

您可以尝试强制PHP删除所有会话,方法是执行

ini_set('session.gc_max_lifetime', 0);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);

这迫使 PHP 将所有会话视为具有 0 秒的生存期,并且有 100% 的概率被清理。

缺点是,无论哪个不幸的用户首先运行这个,当PHP进行清理时,都会有很长的暂停时间,特别是如果有很多会话文件要经过。

对于一个特定的用户,您必须向会话处理程序添加一些代码:

 if ($_SESSION['username'] == 'user to delete') {
     session_destroy();
 }

PHP的垃圾回收器是不可控的,所以你不能给它参数,比如“删除除用户X之外的所有会话”。它严格查看会话文件上上次修改/上次访问的时间戳,并将其与max_lifetime设置进行比较。它实际上不处理会话数据。


答案 2

您可以使用 session_save_path() 查找 PHP 保存会话文件的路径,然后使用 unlink() 将其删除。


推荐