2016-07-08 3 views
1

두 개의 다른 메뉴로 설치 한 인트라넷 웹 사이트가 있습니다. 로그인 한 사용자를 기반으로 메뉴를 표시하는 데 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 주일 만료되도록 설정 했더라도 잠시 후에 사라집니다.

페이지에 대한 코드의 나머지 전에 :

+0

쿠키 설정 (I * think *)은 스크립트가 끝날 때까지 실제로 아무 것도하지 않으므로 새 쿠키 값을 설정하지 않고 같은 스크립트의 해당 쿠키 값을이 순서대로 읽을 수 없습니다. .. – Martin

+0

@Martin 그래서 내가'if'' 또는'. '$ _SERVER [ 'AUTH_USER']''또는''$ _COOKIE [ 'UserName']'가 배열의 사용자 이름 중 하나와 일치하는지 검사합니다. 그리고 문서는 내 스크립트의 출력 전에 보내야한다고 말합니다. http://php.net/manual/en/function.setcookie.php – Mike

+0

하지만 쿠키 값이 맞는지 확인하는 것이 좋습니다. 쿠키 값을 적어도 (잠재적으로) 쿠키 값을 설정 한 후에 * 적어도 한 페이지로드 *라고 부르시겠습니까? – Martin

답변

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가 이미 사용자 이름으로 설정됩니다.

<?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 모든 관리자의 사용자 이름을 유지하는 배열입니다 :

그런 다음 HTML의 몸에서 나는이 있습니다. 그런 다음 $_SERVER['AUTH_USER'] 또는 $_COOKIE['UserName']이 배열의 사용자 중 하나와 일치하는지 확인합니다. 지금까지 나는 주말 내내이 페이지를 열어 둘 수 있었고 여전히 돌아와서 Admin Menu를 가지고 제자리에 머무르고 있습니다.

관련 문제