PHP 未设置未知会话 ID


PHP unset unknow session id

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

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

当您注销时;

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

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

所以我知道在 $_SESSION[] 数组中的某个地方,一个值等于"myBannedMemberID"。如何找到 $_SESSION 密钥并取消设置?

我以为福尔可以有用。但是,如果我的系统上有数千名在线会员怎么办?

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

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

尝试使用php函数array_search

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

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

尝试这样的事情:

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

您还可以通过简单地打印 $_SESSION 数组中的所有项目,如下所示:

 print_r($_SESSION);

希望这有帮助。

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

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

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

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

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

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

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