私が作成したログイン システムは、最初にユーザーを正常にログに記録し、ユーザーは期待どおりにインデックスにリダイレクトされます。ただし、ユーザーがナビゲーション リンクをクリックして (制限されている) 別のページに移動すると、ユーザーはログイン ページにリダイレクトされます。2 回目にログインすると、すべてのページに適切にアクセスできます。
セッション ID を印刷して、セッション配列のダンプを作成しました。ユーザーがログインページにアクセスすると、最初にセッション ID「x」があり、次にセッション ID「x」がまだあるインデックスページにリダイレクトされることに気付きました。ただし、サイトの別のページに移動しようとすると、ログイン ページにリダイレクトされ、セッション ID が「y」になります。2 回目にログインすると、すべてのページにセッション ID「y」が表示されます。
ユーザーがリダイレクトされた後にセッション ID が変更される原因は何ですか?
これが私のログインスクリプトです。
session_start();
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string(md5($_POST['password']));
$submit = $_POST['submit'];
$error = '';
if(isset($submit)){
// Check if fields are filled out
if($username == '' or $password == ''){
$error = 'Please enter a Username and Password';
}else{ // Proceed with login process
// See if user exists
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
if(mysql_num_rows($query)<1){
echo 'Invalid Username/Password Combination';
}else{ // Grab user's information
$user = mysql_fetch_assoc($query);
if($password == $user['password']){//Login Success, Redirect and set Session Vars
$_SESSION["loggedIn"] = true;
$_SESSION['username'] = $user['username'];
$_SESSION['name'] = $user['first'];
$_SESSION['auth'] = $user['authorization'];
session_write_close();
header("Location: home.php");
exit;
}else{
$error = 'Invalid Username/Password Combination';
}
}
}
}
およびページ制限スクリプト:
session_start();
if(isset($_SESSION["loggedIn"])){
echo '<div align="right" id="user">Welcome '.trim($_SESSION['name']).'! <a href="../resources/php/logout.php">Sign Out</a> | <a href="../resources/php/editAccount.php">Edit Account</a></div>';
}else{
header("Location: login.php");
}