編集:自分自身に回答を割り当てることについて苦情があった後、提供された回答が満足のいくものではなかったことを更新したいと思います。誰も出てきて、これがあなたの問題であると明確に言ったわけではありません。これを行うと、解決策が得られます。報奨金を授与するには、単なる提案では不十分です。最後に、問題はサーバー設定にあり、サーバー セッションに関する調査を行い、Stackoverflow/Serverfault を調べた後、この問題を解決する最善の方法を判断することができました。ですから、自分の答えを正解とするのは不当だとは思いませんでした。
LDAP に依存して身元を確認し、セッションを使用してユーザーの認証状態を維持する PHP ベースの認証システムがあります。
最近、セッションが期限切れになったように、ログイン ページに戻されているように見えることに気付きました。問題は、私が気づいた特定の理由ではないようであり、このようなものをデバッグ/テストする方法がわからないことです。
セッションを開始する認証関数は次のとおりです。
function authenticateUser($user, $password){
//assuming ldap connection and verification of user login/pass
//this is what will happen with authenticate user which is called
//when user submits login/pass on authentication form.
$_SESSION['id'] = $uID;
$time = time();
$_SESSION['time'] = $time;
$_SESSION['lastActivity'] = $time;
$_SESSION['expiration'] = $time+$cookieExpiration;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['secret'] = md5(rand());
$_SESSION['userHash'] = getSessionHash();
$_SESSION['firstLogin'] = isFirstLogin($user);
//assign cookie to user and log authentication
giveCookie("userHash", $_SESSION['userHash'],0);
logAuthenticationAttempt($user, $_SERVER['REMOTE_ADDR'], 1);
return true;
}//end authenticateUser
クッキー関数を与える:
function giveCookie($name, $value, $expiration=0){
global $path, $site;
setcookie("userHash", $_SESSION['userHash'], $expiration, $path, $site, true, true);
}//end giveCookie
認証ステータスを必要とするアクションを続行できるようにする前に、ユーザーが認証されていることを確認するために各ページで呼び出される関数を次に示します。
function isValidUser(){
global $links; global $userName; global $userID; global $cookieExpiration;
if(isset($_COOKIE['userHash']) and isset($_SESSION['userHash'])){
if($_COOKIE['userHash'] == $_SESSION['userHash']){
$userName = $_SESSION['nameN'];
$userID = $_SESSION['id'];
//update userHash cookie for additinoal expiration time this way session
$time = time();
$expiration = $time+$cookieExpiration;
$_SESSION['lastActivity'] = $time;
giveCookie("userHash", $_SESSION['userHash'],0);
$_SESSION['expiration'] = $expiration;
return true;
}
}
return false;
}//end isvalidUser()
これをテストする方法に関するアドバイスやフィードバックをいただければ幸いです。何らかのアクションを実行した後、ログイン ページに戻されることがある理由を突き止めようとしています。
認証を要求するページで、私が上部で行うことは次のとおりです。
if(!isValidUser()){changePage($links['login']."?refer=".$links['requestHelp']);}
//note: changePage is just a function for header("location: somepage.php");