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

时间:2016-07-08 16:09:59

标签: php webmatrix

我有一个内部网网站,我已经设置了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数组中没有名称为&#34; UserName&#34;的结果。它会在一段时间后消失,即使我将它设置为在设置后一周到期。

1 个答案:

答案 0 :(得分:1)

这是我最终要做的事情:

在页面的其余代码之前:

<?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));    
    }
?>

这将确定已为UserName设置$_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']是否匹配数组中的一个用户。到目前为止,我已经能够将页面打开整整一个周末,并且仍然会回来并刷新管理员菜单,让我保持原状。