困惑する問題があります。Webサイトのログインシステムを構築していますが、IE 9の1人のユーザーのコンピューターでのみ、サインインスクリプトが失敗します。Fiddlerを使用して、適切なPOSTデータが送信されていることを確認しました。私はそのコンピューターでもっと仕事をするでしょうが、私にはその機会がありません。
正しいログインの詳細が送信されていることを知っています。誤ったログイン詳細が送信されると、PHPスクリプトによって正しいエラーが送信され、すべてのアカウントでログインが失敗します。サインインシステムはPHPセッションを使用します。私はこれに完全に困惑していて、そのようなものを見たことがありません。
Gatewaymma.comにあるサイト私は特別なアクセス権を持たないテストアカウントを設定しました:
ユーザー名:testAcc
pwd:test22
繰り返しますが、これはIE 9でのみ発生し、他のブラウザーでは発生せず、1台のマシン(win 7)でのみ発生するため、複製できませんでした。私が知る限り、正しい$_POSTデータが受信されます。
誰かがこれを複製するか、これを引き起こしている可能性があると彼らが見た可能性のある領域を与えることができれば、それは大いにありがたいです。
Cookieのセキュリティが問題の原因である可能性があると思っていましたが、Cookieのチェックを追加した後、エラーは発生しませんでした。
ログインスクリプトの一部は次のとおりです。
if(/* the password was correct, there is def no problem here*/){
session_regenerate_id(true);
$_SESSION['logged'] = true;
/*set other session vars*/
DB::query("UPDATE fa_logged_ips SET tries = 0, next_try = 0 WHERE ip = %s LIMIT 1", $_SESSION['ip']);
DB::query("UPDATE fa_users SET last_login = $_SESSION[last_activity] WHERE ID = %s LIMIT 1", $_SESSION['uid']);
}
}
//If the login was not successful (this error message is not fired, so I don't believe the session is being lost somewhere after this point
if($_SESSION['logged'] !== TRUE){
$fArray['loginErr'] = "The username and password combination you entered is not valid.";
check_ip();
}
スクリプトの最後のセクションでは、ユーザーがログインしていることを確認します。つまり、セッションは正常に作成されましたが、ユーザーがホームページにリダイレクトされると、セッションが失われていることに注意してください。
編集:もう1つ、このログインシステムは、同じコンピューターで正常に動作するサイトの別のセクション(サブドメイン)で起動したものから派生しており、過去5か月間は正常に動作しています。
編集:
if(!isset($_SESSION['logged'])){
formatSession();
setcookie('cookieTest', '1', time()+3600*24*30); //set a cookie that will be checked for later
$ip = $_SERVER['REMOTE_ADDR']; //Get the user's ip address
//Check if the IP is logged in the system
$logged_ip = DB::queryFirstRow("SELECT * FROM fa_logged_ips WHERE ip = %s", $ip);
//if so
if(!empty($logged_ip)){
//if ip has too many failed logins
if ($logged_ip["tries"] < $login_attempt_limit) {
$_SESSION['next_try'] = $logged_ip["next_try"]; //store when their lockout ends
}
else {
$_SESSION['next_try'] = 0; //otherwise they may try to log in at their discretion
}
$_SESSION['tries'] = intval($logged_ip["tries"]); //store how many login tries the ip has
}
}
The session format funciton
function formatSession(){
global $sysEnable;
$_SESSION['logged'] = false; //The user is not logged in
$_SESSION['sysEnable'] = $sysEnable;//Store wether or not the system is accessible
}
編集
これは、IEのある種のセキュリティ設定に関連していると強く感じています。これは、1台のコンピューターでのみ発生し、他のマシンでは複製できなかったためです。また、Cookieのセキュリティを強化することで同様の効果を出すことができましたが、前述のように、コンピュータでのCookieのチェックは成功しました。
9/1を編集
IEがセッションの維持に失敗している可能性があると思います。IEはセッションIDを保存していません。繰り返しますが、私はこの動作を再現できなかったので、そのコンピューターで作業できるようになるまで、100%ポジティブになることはできません。