私は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週間で終了するように設定しても、ちょっと後に消えます。
ページのコードの残りの部分の前に:
スクリプトを終了するまでクッキーを設定する(I * think *)ので、新しいクッキー値を設定できず、同じスクリプトのクッキー値からその順序で読み取ることはできません。 .. – Martin
@Martinだから私はそれを 'if''または' 'として持っている。 '$ _SERVER ['AUTH_USER']' 'または' '$ _COOKIE ['UserName']'が配列中のユーザー名の1つに一致するかどうかをチェックします。そして、ドキュメンテーションは、それは私のスクリプトからの出力の前に送信されなければならないと言います。 http://php.net/manual/en/function.setcookie.php – Mike
あなたはクッキーの値が正しいかどうかを確認するために呼び出しています。クッキー値を少なくとも1ページロードする*後に(潜在的に)クッキー値を設定していますか? – Martin