두 개의 다른 메뉴로 설치 한 인트라넷 웹 사이트가 있습니다. 로그인 한 사용자를 기반으로 메뉴를 표시하는 데 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']
에는 페이지에 인쇄하지 않는 한 항상 사용하지 않는 값이 있습니다.
편집
난 그냥 내 이름을 표시하는 페이지 설정이 인스턴스를했다. 나는 약 20 ~ 30 분 동안 다른 페이지에 있었고 내가 돌아 왔을 때 내 사용자 이름을 표시하지 않았고 내게 AdminMenu
을주지 않았습니다. 그런 다음 내 메인 페이지로 이동하여 (로그인 한 사용자를 확인하기 위해 asp.net을 사용할 수 있음) 다시 방문하여 사용자 이름과 AdminMenu
을 다시 표시했습니다.
EDIT2
나는 내가 그것을 알아 냈다고 생각했다.
if
이 항상 작동하지 않는 것은 아니 었습니다. 페이지를 새로 고칠 때마다 내 사용자 이름이 서버에 전송되지 않았기 때문입니다. 내가 새로 고침 할 때 내 사용자 이름이 전송되지 않았을 때 if
은 그 일을 수행하고 관리자 메뉴를 제공하지 않았습니다. 이 후까지 사용할 수 없기 때문에
<?php setcookie("UserName",$_SERVER['AUTH_USER'],time() + (60*60*24*7)); ?>
는 그 다음
if
에 그 추가했다 :이 해결하기 위해 나는 (7 일의 기간에) 내 이름을 유지하기 위해 글로벌
$_COOKIE
변수를 사용하여 종료 처음 새로 고침 : 나는
$_COOKIE
값이 유지되지 않는 것을 오늘 발견했다 그러나
<?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');
}
?>
. 나는 아직도 이유를 모른다. 파일의 첫 번째 줄에 <?php setcookie("UserName",$_SERVER['AUTH_USER'],time() + (60*60*24*7)); ?>
이 있고 나머지 코드는 다음과 같습니다. 페이지를 탐색 할 때 제일 먼저 실행되도록하십시오.
페이지를 닫지 만 활성화되지 않은 상태에서 다시 돌아 오면 $_COOKIE
이 재설정됩니까? 나는 거기에 있었던 것을보기 위해 var_dump
를 사용하고 있었다. 관리자 메뉴가 표시되지 않으면 $_COOKIE
배열에 "UserName"이라는 이름의 결과가 없습니다. 내가 설정 한 후 1 주일 만료되도록 설정 했더라도 잠시 후에 사라집니다.
페이지에 대한 코드의 나머지 전에 :
쿠키 설정 (I * think *)은 스크립트가 끝날 때까지 실제로 아무 것도하지 않으므로 새 쿠키 값을 설정하지 않고 같은 스크립트의 해당 쿠키 값을이 순서대로 읽을 수 없습니다. .. – Martin
@Martin 그래서 내가'if'' 또는'. '$ _SERVER [ 'AUTH_USER']''또는''$ _COOKIE [ 'UserName']'가 배열의 사용자 이름 중 하나와 일치하는지 검사합니다. 그리고 문서는 내 스크립트의 출력 전에 보내야한다고 말합니다. http://php.net/manual/en/function.setcookie.php – Mike
하지만 쿠키 값이 맞는지 확인하는 것이 좋습니다. 쿠키 값을 적어도 (잠재적으로) 쿠키 값을 설정 한 후에 * 적어도 한 페이지로드 *라고 부르시겠습니까? – Martin