我正在使用jQueryAjax调用PHP验证登录表单。在php中,我创建一个会话,如果他们选中“记住我”复选框,我想创建一个cookie。以下是php代码:
<;?php
包括“../includes/connection.php”;
日期默认时区设置('GMT');
$name=$_POST['username'];
$pass=$_POST['password'];
$query=mysql\u query(“从username='$name'限制为1的用户中选择id、用户名、密码”);
if(mysql_num_rows($query)==0){
回声“错误”;
出口
}
while($row=mysql\u fetch\u array($query)){
如果($row['username']=$name&;$row['password']==$pass){
会话_start();
$\会话['username']=$row['username'];
$\会话['usrID']=$row['id'];
呼应"成功",;
如果($_POST[‘记住’])){
setcookie('username',$row['username'],$exp);
setcookie('password',$row['password'],$exp);
setcookie('usrID',$row['id'],$exp);
}
}否则{
回声“错误”;
出口
}
}
?>;
会话设置成功,但根本没有设置cookie。我尝试设置了所有的值(域、路径等),但没有改变任何东西。我有什么明显的遗漏吗
以下是一些建议:
- 确保您指定的日期过期格式正确
-
在重定向页面上设置cookie时,必须在调用
标题(“位置:…”)后设置cookie例如:header('位置:http://www.example.com/');
setcookie('asite',$site,time()+60*60',/','site.com') -
如果您有类似于
www.domain.com/path1/path2/的人工URL,则必须将cookie path设置为/以适用于所有路径,而不仅仅是当前路径setcookie('type_id',$new_type_id,time()+60*60*24*30'/)
请注意参数中的最后一个/
从PHP手册:
服务器上的路径,其中
cookie将在上提供。如果设置为
“/”,则cookie将可用
在整个域内。如果设置为
“/foo/”,则cookie将仅为
可在/foo/目录中找到
以及所有子目录,如
/域的foo/bar/of。默认值
值是当前正在运行的目录
正在设置cookie
setcookie()定义要与其余HTTP头一起发送的cookie。与其他标题一样,cookies必须在脚本输出之前发送,这意味着在此之前不应有html/代码回送语句