2

AJAX を介して動作するログイン関数を作成しています。ユーザーがログインできた場合、2 つの新しい Cookie が存在するはずです。うまくいかなかった場合 (間違った電子メールまたはパスワード)、Cookie は設定されていません。

私の問題はこれです。ログインすると、Cookieが設定されますが、Cookieがチェックされるコードに到達すると、空になります。ページをリロードすると、Cookie が存在し、すべてが機能します。AJAX リクエスト後に Cookie が利用できないのはなぜですか?

Javascript:

$.ajax({  
    type: "POST",  
    url: "php/login.php",  
    data: dataString,  
    async: false
}); 

var email = '<?php echo $_COOKIE['email']; ?>';
var login = '<?php echo $_COOKIE['login']; ?>';

if(email != null && email != "" && login != null && login != "") {
    var html = '<h3>You are logged in as <b>' + email + '</b></h3><br><br><button id="logoutbtn" class="submitButton">Ausloggen</button>';
    $("#registInfos").empty();
    $(html).appendTo($('#registInfos'));
} else {
    console.log('login not successful');
    $('<p>Login failed, wrong email or password?</p>').appendTo($('#registInfos'));
}

login.php の内容:

<?php include('../../admin/php/connection.inc.php'); ?>
<?php header('Access-Control-Allow-Origin: *'); ?>

<?php
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {

        $email = $_POST['email'];
        $password = $_POST['password'];

        $abfrage = "SELECT email, password FROM ios_user WHERE email = '$email' LIMIT 1";
        $ergebnis = mysql_query($abfrage);
        $row = mysql_fetch_object($ergebnis);

        if($row->password == $password) {

            session_start();

            setcookie("login", "true", time()+3600*24*30*12, "/");
            setcookie("email", $email, time()+3600*24*30*12, "/");

            session_commit();
        } 
    }
?>
4

1 に答える 1

1

問題は次のコードです。

var email = '<?php echo $_COOKIE['email']; ?>';
var login = '<?php echo $_COOKIE['login']; ?>';

ページが読み込まれると、サーバーはクライアントから送信された Cookie に基づいて電子メール、ログインをレンダリングします。ただし、ajax リクエストを送信すると、ページはリロードされず、これらの値は変更されません。Cookie が設定されていても、ページが最初に読み込まれたときにレンダリングされた古い値を引き続き使用しています。

次のいずれかをお勧めします。

  • ログイン後にユーザーを別のページにリダイレクトする
  • または、メッセージを表示する場合、サーバーはログインの成功を示すステータス コードを含むメッセージを返すだけで、クライアント側の JavaScript はそのメッセージを解析し、成功情報を表示できます (この場合、Cookie に依存する必要はありません)。
于 2013-06-02T04:01:19.153 に答える