为什么我的 php `if` 并不总是有效?

Why does my php `if` not always work?

我有一个 Intranet 网站,我设置了 2 个不同的菜单。我使用 PHP 根据登录者显示菜单。这就是我得到的:

    <?php  
        if ($_SERVER['AUTH_USER'] == 'CORP\mmm976' || $_SERVER['AUTH_USER'] == 'CORP\ibb601' || $_SERVER['AUTH_USER'] == 'corp\mmm976'){
            include('AdminMenu.php');
        }else {
            include('Menu.php');
        }
    ?>

有时有效,有时无效。我是管理员之一,有时 AdminMenu 对我不可用?这是怎么回事,我该如何解决这个问题才能 100% 正常工作?

我确实将 <p class="White"><?php echo $_SERVER['AUTH_USER']; ?></p> 添加到页面,然后当名称显示时它工作正常,但如果我应用名称未显示的样式,它会 100% 停止工作。它是否会给我 AdminMenu.

我已经打开了 Windows 身份验证并关闭了匿名身份验证。 $_SERVER['AUTH_USER'] 有一个值,除非我将它打印在页面上,否则并不总是使用它。

编辑

我刚刚有一个实例,我在其中设置了页面以显示我的用户名。我在另一个页面上停留了大约 20 - 30 分钟,当我回来时它没有显示我的用户名,也没有给我 AdminMenu。当我然后导航到我的主页(我可以在其中使用 asp.net 查看谁登录了)然后再次返回时,它再次显示我的用户名和 AdminMenu.

EDIT2

我以为我明白了。

并不是 if 不总是有效,而是每次刷新页面时我的用户名都没有发送到服务器。当我刷新并且没有发送我的用户名时,if 做了它应该做的并且没有给我管理菜单。为了解决这个问题,我最终使用全局 $_COOKIE 变量来保留我的用户名(持续时间为 7 天):

<?php setcookie("UserName",$_SERVER['AUTH_USER'],time() + (60*60*24*7)); ?>

然后必须将其添加到 if 中,因为它在您第一次刷新后才能使用:

    <?php
        $AdminUsers = array("CORP\User1","CORP\User2");
        if  (in_array($_SERVER['AUTH_USER'],$AdminUsers,TRUE) || in_array($_COOKIE['UserName'],$AdminUsers,TRUE))
        {

            include('AdminMenu.php');
        }
        else
        {
            include('Menu.php');
        }
    ?>

但是我今天发现 $_COOKIE 值没有被保留。我还不知道为什么。我将 <?php setcookie("UserName",$_SERVER['AUTH_USER'],time() + (60*60*24*7)); ?> 作为文件中的第一行,然后是我的其余代码。所以这是导航到页面时的第一件事 运行。

如果我离开页面,但没有激活,然后回来,它会重置 $_COOKIE 吗?我正在使用 var_dump 查看那里有什么。当我没有获得管理菜单时,$_COOKIE 数组中没有结果,名称为 "UserName"。它只是在一段时间后消失,即使我将它设置为在设置后一周过期。

这是我最终不得不做的事情:

在页面的其余代码之前:

<?php 
    if(isset($_COOKIE['UserName']))
    {
        setcookie("UserName",$_COOKIE['UserName'],time() + (60*60*24*7));
    }
    else
    {
        setcookie("UserName",$_SERVER['AUTH_USER'],time() + (60*60*24*7));    
    }
?>

这将确定 $_COOKIE 已经为用户名设置。

然后在 HTML 的正文中,我有这个:

    <?php
        $AdminUsers = array("CORP\User1","CORP\User2");
        if  (in_array($_SERVER['AUTH_USER'],$AdminUsers,TRUE) || in_array($_COOKIE['UserName'],$AdminUsers,TRUE))
        {

            include('AdminMenu.php');
        }
        else
        {
            include('Menu.php');
        }
    ?>

$AdminUsers 是一个包含所有管理员用户名的数组。然后我检查 $_SERVER['AUTH_USER']$_COOKIE['UserName'] 是否匹配数组中的用户之一。到目前为止,我已经能够让该页面保持打开状态整个周末,并且仍然会回来刷新并使用为我保留的管理菜单。