サーバーの 1 つに、次のようなかなり古い php 認証スクリプトがあります。
ob_start();
$log = new Auth();
// returns true
$checkSession = $log->checkLog();
if(!$checkSession){
header("Location: ../index.php");
exit();
}else{
include "content/".$_GET["content"].".php";
}
$content = ob_get_contents();
ob_end_clean();
include "../".WEBROOT_TEMPLATE_FILE;
それは常にスムーズに機能していました (認証されたユーザーはページにアクセスでき、認証されていないユーザーはホームページにリダイレクトされました) ... 今日まで !
まったく知られていない何らかの理由で、ユーザーが Access 2000 データベースによって生成されたリンクからサーバー ページの 1 つにアクセスしようとすると、常に index.php にリダイレクトされます。
奇妙なことに、URL をブラウザに直接貼り付けても問題なく動作します。どちらの場合も、URL はまったく同じで、$_SERVER 変数も同じです。同一の HTTP ヘッダーも確認しました。
また、リダイレクトにコメントすると、うまくいきます:
if(!$checkSession){
//header("Location: ../index.php");
//exit();
}else{
// that part is executed
include "content/".$_GET["content"].".php";
}
誰かがここで同じ問題を抱えていましたが、悲しいことに有効な回答が得られませんでした:ヘッダー(場所: xxx) が内部にある場合、PHP の if-statement は無視されました
何か案が ?
よろしくお願いいたします。
編集:解決策を見つけました
何らかの理由で、Apache サーバーは Access 2000 データベースによって生成された http 要求を気に入らず、変更されたヘッダー (特に http 受け入れ) を使用して新しい要求を発行しました...悲しいことに、最初の要求はセッションを初期化しませんでした... したがって、index.php へのリダイレクト。
したがって、(醜いが機能する)解決策は、私にとって:
if($_SERVER['HTTP_ACCEPT']!="*/*"){
// Do your stuff
}