在AJAX请求中设置Cookie后,Cookie不可用

时间:2013-06-01 22:02:17

标签: php javascript ajax jquery cookies

我正在编写一个应该通过AJAX工作的登录功能。如果用户能够登录,则应该有两个新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();
        } 
    }
?>

1 个答案:

答案 0 :(得分:1)

问题是这段代码:

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

当页面加载时,服务器会根据客户端发送的cookie呈现电子邮件,登录。但是当您发送ajax请求时,页面不会重新加载,并且这些值不会更改。即使设置了cookie,您仍然使用页面首次加载时呈现的旧值。

我建议你:

  • 登录后将用户重定向到另一个页面
  • 或者如果您想要显示消息,您的服务器只会发回一条消息,其状态代码表示成功登录,客户端的javascript可以解析该消息并显示成功信息(不需要依赖cookie这个案例)