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]);
我之前的回答只是取消设置 $_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]);
}
}
我有一个用 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]);
我之前的回答只是取消设置 $_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]);
}
}