用ajax调用用php设置cookie

时间:2013-05-09 18:42:11

标签: php javascript ajax

我已经审阅了很多有关此主题的帖子,但我的代码似乎并没有设置任何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吗?

2 个答案:

答案 0 :(得分:2)

您的setcookie()声明中有拼写错误。因此,没有可用于cookie的数据。

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

应该是

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

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

答案 1 :(得分:0)

这里有一些事情。在调用setcookie()之前回显数据会抛出错误,因为PHP认为已经发送了标题。你的代码中也有拼写错误。您将cookie值设置为$ cookieInfo,并使用$ cookeInfo作为setcookie()的参数。