Php 使用数组和注销的登录系统错误

Php 使用数组和注销的登录系统错误,php,Php,我已经在我的代码中添加了以下内容: $rs=$mysqli->query('SELECT ip FROM allow_ip'); $allow = array(); while($row = $rs->fetch_assoc()) { $allow[]=$row['ip']; } if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"]

我已经在我的代码中添加了以下内容:

$rs=$mysqli->query('SELECT ip FROM allow_ip');
$allow = array();
while($row = $rs->fetch_assoc())
{
    $allow[]=$row['ip'];
}
if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow))
{
header("Location: ../../404.php");
exit();
}
并且注销不适用于此! 如果使用此工具进行返工:

$allow= array("....","127.0.0.1","857...")
if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow))
{
header("Location: ../../404.php");
exit();
}
工作!!!为什么? 注销是

    include_once '../protect/functions.php';
sec_session_start();

// Unset all session values 
$_SESSION = array();

// get session parameters 
$params = session_get_cookie_params();

// Delete the actual cookie. 
setcookie(session_name(),
        '', time() - 42000, 
        $params["path"], 
        $params["domain"], 
        $params["secure"], 
        $params["httponly"]);

// Destroy session 
session_destroy();
header('Location: ../../index.php');
为什么阵列会出现问题?还是别的什么?以及如何找到解决方案?

我不确定,但尝试一下(不使用索引
$i
):


$allow
自动增加索引

代码看起来很好,如果您已经说明$allow的结果是:

array(3) { [0]=> string(1) "127.0.0.1" [1]=> string(1) "127.0.0.2" [2]=> string(12) "127.0.0.3" }
那么答案肯定是您正在测试的$\u服务器['REMOTE\u ADDR']或$\u服务器['HTTP\u X\u FORWARDED\u FOR“]与这些值之一不匹配

那么,如果你这样做会发生什么呢:

var_dump($_SERVER['REMOTE_ADDR'],$_SERVER["HTTP_X_FORWARDED_FOR"]);

要取消设置会话数据,请在代码中也添加此行:

unset($_SESSION);
session_destroy();

你不需要这美元。无论如何,从第一个示例Array(3){[0]=>string(1)“127.0.0.1”[1]=>string(1)“127.0.0.2”[2]=>string(12)“127.0.0.3”}是的,关于$i++,这是我的错。。。。别再工作了!注销为:
string(12)”@。1@.@5.1@“空编辑:问题是注销不起作用!如果放这个数组!我不明白你想对注销说什么。基本上,您的REMOTE_ADDR似乎与$allow中的一个不匹配,因此您将被重定向到404.php-因此您的注销脚本将永远不会像重定向时那样执行。除非你的意思是在404页面中有注销脚本?好的,听着……当我的代码中有这个脚本时:$rs=$mysqli->query('SELECT ip FROM allow_ip')$允许=数组()$i=0;而($row=$rs->fetch_assoc()){$allow[$i]=$row['ip'];$i++}如果(!in_array($_SERVER['REMOTE_ADDR'],$allow)&&!in_array($_SERVER[“HTTP_X_FORWARDED_FOR”],$allow))注销不起作用。。。。当我有这个:$allow=array(“…”、$127.0.0.1”、“857…”)如果(!in_array($in_SERVER['REMOTE_ADDR',$allow)&!in_array($in_SERVER[“HTTP_X_FORWARDED_FOR”],$allow))注销工作!但从您提供的信息来看,唯一的区别是示例一中的$allow=
array(3){[0]=>string(1)“127.0.0.1”[1]=>string(1)“127.0.0.2”[2]=>string(12)“127.0.0.3”}
(来自DB查询)和示例二中的=
array(3){[0]=>string(1)”..[1]=>string(1)“127.0.0.1”[2]=>string(12)“857…”
。所以听起来像(假设你不想被重定向到404.php)$\u服务器['REMOTE\u ADDR']匹配的是“…”或“857…”-这在你的数据库中不存在?脚本工作得很好!!!所有ip都是示例!!我有一个登录系统,我添加了这个代码!!工作完美!!!但是当我添加以下代码时,logout.php不起作用:$rs=$mysqli->query('selectip fromlow_ip')$允许=数组();while($row=$rs->fetch_assoc()){$allow[]=$row['ip'];}if(!in_array(…)…)以及当我更改代码以从数组中获取ip并从db$allow=array中获取NO时($127.0.0.1”,“127.0.0.1”,“127.0.0.1”);//如果(!in_array(…)中获取ip就是一个示例。注销是有效的
unset($_SESSION);
session_destroy();