如何关闭一个/所有php会话?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (76)

我有一个非常基本的php会话登录脚本。我希望强制某个用户退出或强制所有用户退出。

我如何阅读我的网站上的所有会话,并删除部分或全部会话?

提问于
用户回答回答于

<?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这样的服务器,你可以关闭,清除缓存,刷卡记忆重置,清除日志等,通常删除临时使用。

用户回答回答于

你可以尝试强制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设置进行比较。它实际上不处理会话数据。

扫码关注云+社区

领取腾讯云代金券