1

私が作成したログイン システムは、最初にユーザーを正常にログに記録し、ユーザーは期待どおりにインデックスにリダイレクトされます。ただし、ユーザーがナビゲーション リンクをクリックして (制限されている) 別のページに移動すると、ユーザーはログイン ページにリダイレクトされます。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");    
    }
4

3 に答える 3

0

制限されたページでセッション変数を設定してみてください。

session_start();
$_SESSION["loggedIn"]
$_SESSION["loggedIn"];
$_SESSION['username'];
$_SESSION['name'];
$_SESSION['auth'];
于 2012-04-22T04:28:10.107 に答える
0

デバッグの目的print_r($_SESSION)で、各ページに設定して、正しく印刷されているかどうかを確認してください... 値を設定して、ページがまたがっているかどうかを確認できます...

于 2013-06-12T04:46:32.820 に答える