PHP 取消设置未知会话 ID

PHP unset unknow session id

我有一个用 PHP 编写的登录系统。当您登录成功时;

<?php $_SESSION[session_id()] = "yourMemberIDHere"; ?>

当您注销时;

<?php unset($_SESSION[session_id()]); ?>

这是我的问题。管理员可以禁止成员。被禁止的成员无法登录。但是当成员在 he/she 在线时被禁止时,它不会注销。因为我只在登录时控制ban态。

所以我知道 $_SESSION[] 数组中某处的值等于 "myBannedMemberID"。我怎样才能找到那个 $_SESSION 键并取消设置它?

我认为 foreach 很有用。但是,如果我的系统上有成千上万的会员在线怎么办?

尝试这样的事情:

<?php
if(isset($_SESSION['myBannedMemberID'])){
    unset ($_SESSION['myBannedMemberID']);
}
?>

您还可以通过简单地像这样打印它来查看 $_SESSION 数组中的所有项目:

 print_r($_SESSION);

希望这对您有所帮助。

尝试使用 php 函数 array_search

$key = array_search($myBannedMemberID, $_SESSION);
unset($_SESSION[$key]);

文档:http://php.net/manual/en/function.array-search.php

我之前的回答只是取消设置 $_SESSION 变量的示例。但是要真正踢掉那个用户,你应该写一个函数来检查数据库中是否有被阻止或被禁止的用户,如果为该用户 ID 返回一行,你就销毁他们的 session 并有一个 header 重定向,将它们带到您网站的主页或您想要带它们去的任何地方。

然后您还需要检查该用户是否也在登录脚本中被阻止或禁止。

我希望这个建议对您有进一步的帮助。

所以你想强制注销已登录但被禁止的人?

您几乎需要在存储当前用户会话信息的地方执行此操作。因此,要么通过在每个页面加载时从数据库(或左右)检查用户有效性,要么一个一个地检查会话存储并删除条目。

如果您使用默认设置(基于文件的会话),您可以 scandir(session_save_path()) 并检查每个文件,直到您从那里找到正确的用户 ID 并删除文件。

编辑:要从这些文件(或您存储数据的地方)正确读取数据,请查看 php.net 中的评论:http://php.net/manual/en/function.session-decode.php#108037

您可以在所有会话中搜索:

foreach ($_SESSION as $name => $value) {
    if ($value == 'myBannedMemberID') {
       unset($_SESSION[$name]);
    }
}