2016-07-08 7 views
1

私は2つの異なるメニューでセットアップしたイントラネットのウェブサイトを持っています。私はにログインしているユーザーに基づいて、メニューを表示するために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は、それが想定されていたことを行い、私に管理者メニューを与えませんでした。それはあなたの後まで使用することはできませんので、

<?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を使って何があったのかを見ていました。 Admin Menuが表示されない場合、$_COOKIEの配列に「UserName」という名前の結果はありません。私はそれが設定された後1週間で終了するように設定しても、ちょっと後に消えます。

ページのコードの残りの部分の前に:

+0

スクリプトを終了するまでクッキーを設定する(I * think *)ので、新しいクッキー値を設定できず、同じスクリプトのクッキー値からその順序で読み取ることはできません。 .. – Martin

+0

@Martinだから私はそれを 'if''または' 'として持っている。 '$ _SERVER ['AUTH_USER']' 'または' '$ _COOKIE ['UserName']'が配列中のユーザー名の1つに一致するかどうかをチェックします。そして、ドキュメンテーションは、それは私のスクリプトからの出力の前に送信されなければならないと言います。 http://php.net/manual/en/function.setcookie.php – Mike

+0

あなたはクッキーの値が正しいかどうかを確認するために呼び出しています。クッキー値を少なくとも1ページロードする*後に(潜在的に)クッキー値を設定していますか? – 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が既にユーザー名に設定されています。

は、その後、私はこれを持っている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つに一致するかどうかを確認します。これまでのところ、私は週末の間、ページを開いたままにしておきました。

関連する問題