PHP取消设置unknow session id

时间:2015-01-15 13:46:09

标签: php session

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

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

当您注销时;

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

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

所以我知道$ _SESSION []数组中的某个值等于&#34; myBannedMemberID&#34;。如何找到$ _SESSION键并取消设置?

我认为foreach可能很有用。但是,如果我的系统上有成千上万的在线成员呢?

5 个答案:

答案 0 :(得分:2)

您可以搜索所有会话:

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

答案 1 :(得分:0)

尝试这样的事情:

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

您还可以通过以下方式打印$_SESSION数组中的所有项目:

 print_r($_SESSION);

希望这会有所帮助。

答案 2 :(得分:0)

尝试使用php函数array_search

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

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

答案 3 :(得分:0)

我以前的回答只是取消设置$ _SESSION变量的一个例子。但是为了实际启动该用户,您应该编写一个函数来检查数据库中是否有被阻止或禁止的用户,如果为该用户ID返回了一行,则会销毁他们的会话并使用头重定向将其带到家中您网站的页面或您想要的任何地方。

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

我希望这个建议能够进一步帮助你。

答案 4 :(得分:0)

所以你想强制退出登录但被禁止的人吗?

在存储当前用户的会话信息时,您几乎需要这样做。因此,要么通过检查每个页面加载的db(或左右)的用户有效性,要么逐个通过会话存储,只需删除该条目。

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

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