我有一个内部网网站,我已经设置了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;的结果。它会在一段时间后消失,即使我将它设置为在设置后一周到期。
答案 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']
是否匹配数组中的一个用户。到目前为止,我已经能够将页面打开整整一个周末,并且仍然会回来并刷新管理员菜单,让我保持原状。