通过ajax调用php设置cookie


Set cookie with php from an ajax call

我已经看过很多关于这个主题的文章,但是我的代码似乎并没有设置任何cookie。

所以我的初始ajax调用是这样的:
$("#loginForm").submit(function(event) {
    event.preventDefault();
    var uid = document.getElementById("userLogin").value;
    var pid = document.getElementById("passLogin").value;
    var url = "../_scripts/loginScript.php";
     $.ajax({
            type: "POST",
            url: url,
            datatype : "script",            
            data: {user: uid, pass: pid},
            success: function(msg) {
                if( strcmp(msg,"passwords are equal") )
                    location.reload();
                else                        
                    $('#error1').html(msg).show(100);       
            }
    });
});

我在另一个js库中编写了strcmp()函数。

在做了一堆哈希和盐处理之后,我的PHP看起来是这样的:

<?php
    if($hashPass == $pass)
    {
        echo "passwords are equal";
        $cookieInfo = $_POST['user'].",".$clearance;
        setcookie("loggedIn", $cookeInfo,0,"/");
        exit;
    }
    else
    {
        echo "Invalid password";
        exit;
    }
?>

当我测试它时,"密码是相等的"消息返回并且页面被重新加载…但是当我打开浏览器的时候,我的cookie从来没有设置过。

我不知道我做错了什么…我使用这段代码之前,当我使用一个表单直接提交到一个php文件,它的工作很好,但现在,我使用ajax的cookie似乎没有得到设置。

是因为我没有在header("Location: ...");呼叫后设置cookie…?

您的setcookie()语句中有一个错别字。结果,没有数据可用于cookie。

setcookie("loggedIn", $cookeInfo,0,"/");
应该

setcookie("loggedIn", $cookieInfo,0,"/"); // cookie != cooke

另外,您应该删除echo语句以避免在报头之前发送输出。所有报头信息(包括cookie设置)必须在其他类型的输出之前发送。

这里有一些事情。在调用setcookie()之前回显数据将抛出错误,因为PHP认为头文件已经发送。而且你的代码中有一个错别字。你将cookie的值设置为$cookieInfo,并使用$cookeInfo作为setcookie()的参数。