У меня есть сайт интрасети, который я установил с помощью двух разных меню. Я использую PHP, чтобы отобразить меню на основе вошедший в этом то, что у меня есть:.Почему мой php `if` не всегда работает?
<?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']
имеет значение, которое он просто не всегда использует, если я не печатаю его на странице.
EDIT
Я просто был случай, когда у меня есть настройки страницы, чтобы показать свое имя пользователя. Я был на другой странице около 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». Через некоторое время он просто уходит, хотя я истекаю через неделю после его установки.
Установить cookie (I * think *) на самом деле ничего не делает до конца скрипта, поэтому вы не можете установить новое значение cookie, а затем прочитать из этого значения cookie в том же скрипте в этом порядке. .. – Martin
@Martin Вот почему у меня это как 'if'' или'. Он проверяет 'if'' '_SERVER ['AUTH_USER']' 'или' '$ _COOKIE ['UserName']' соответствует совпадению с одним из имен пользователей в массиве. И в документации говорится, что он должен быть отправлен до выхода из моего сценария. http://php.net/manual/en/function.setcookie.php – Mike
, но вы звоните, чтобы проверить, является ли значение cookie; вы вызываете значение cookie как минимум на одну загрузку страницы * после * вы (потенциально) устанавливаете значение cookie? – Martin