我已经看过很多关于这个主题的文章,但是我的代码似乎并没有设置任何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()的参数。