webmatrix — Почему мой php `if` не всегда работает?

У меня есть интранет-сайт, который я настроил с двумя разными меню. Я использую 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». Он просто исчезает через некоторое время, хотя у меня он истекает через неделю после установки.

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

Это определит это $_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'] соответствует одному из пользователей в массиве. До сих пор я был в состоянии оставить страницу открытой в течение целых выходных и все еще возвращаться и обновлять с оставшимся для меня административным меню.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]