首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何杀死一个/所有的php会话?

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

Stack Overflow用户
提问于 2011-03-04 20:33:46
回答 8查看 72.5K关注 0票数 30

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

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

EN

回答 8

Stack Overflow用户

发布于 2011-03-04 22:33:25

您可以尝试通过执行以下操作强制PHP删除所有会话

代码语言:javascript
复制
ini_set('session.gc_max_lifetime', 0);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);

这迫使PHP将所有会话视为具有0秒生命周期,并且有100%被清理的可能性。

缺点是,无论哪个倒霉的用户第一次运行它,都会在PHP进行清理时得到长时间的停顿,特别是在有很多会话文件要处理的情况下。

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

代码语言:javascript
复制
 if ($_SESSION['username'] == 'user to delete') {
     session_destroy();
 }

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

票数 20
EN

Stack Overflow用户

发布于 2011-03-04 20:36:52

您可以使用session_save_path()找到保存会话文件的路径,然后使用unlink()删除它们。

票数 11
EN

Stack Overflow用户

发布于 2012-08-31 18:55:23

更新- 2012年8月

这段代码基于official PHP site和另一个写得很好的snippet on SO

代码语言:javascript
复制
<?php
// Finds all server sessions
session_start();
// Stores in Array
$_SESSION = array();
// Swipe via memory
if (ini_get("session.use_cookies")) {
    // Prepare and swipe cookies
    $params = session_get_cookie_params();
    // clear cookies and sessions
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}
// Just in case.. swipe these values too
ini_set('session.gc_max_lifetime', 0);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
// Completely destroy our server sessions..
session_destroy();
?>

效果很好。像NGinx这样的服务器,你可以关闭,清理缓存,滑动内存重置,清除日志等,并通常删除临时使用。甚至可以降低内存的限制。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5193744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档