【问题标题】:Cookie not availabe after setting it in AJAX request在 AJAX 请求中设置后 Cookie 不可用
【发布时间】:2013-06-01 22:02:17
【问题描述】:

我正在编写一个应该通过 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();
        } 
    }
?>

【问题讨论】:

  • 您必须在登录后重定向到另一个页面。您不能在一个操作中设置和读取相同的 cookie。

标签: php javascript ajax jquery cookies


【解决方案1】:

问题是这段代码:

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

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

我建议你:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2013-03-27
    • 2017-08-05
    • 2016-08-09
    • 2017-12-04
    • 2015-08-06
    • 2015-12-21
    相关资源
    最近更新 更多