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