这个小PHP代码片段用于设置一个cookie,让我确定用户是否登录。出于某种原因,在我使用javascript进行重定向之后,我的所有cookie都不再设置了。为什么会发生这种事?
我可能没有给你足够的信息,如果有的话请告诉我。
...some database queries...
<?php
$expire=time()+(7 * 24 * 60 * 60);
$row = mysql_fetch_array($query);
$email = $row['email'];
$userinfo['name'] = $name;
$userinfo['email'] = $email;
$userinfo = serialize($userinfo);
setcookie("user", $userinfo, $expire);
echo '<script type="text/javascript">
window.location = "../index.php";
</script>';
?>
Tory,请确保在PHP中调用set setcookie
之前没有输出任何内容。甚至没有留白。没有回声。什么都没有。我猜你的脚本在setcookie之前输出一些东西,这会破坏你的脚本。你看到报头已经发送错误了吗?注释掉你的JS,然后检查。你可以这样设置cookie
setcookie(name,value,expire,path,domain,secure);
Domain需要一个字符串形式的域名值,如example.com
,它是可选的。Secure需要一个布尔值,并且是可选的。跳过这两个,通过将path设置为'/'
函数setcookie返回true或false,取决于cookie设置是否成功。您可以这样测试:
if(!setcookie("user", $userinfo, $expire)) {
echo 'Could not set cookie!';
}
如果返回false,则Kumar是正确的。否则一定有其他原因。
EDIT setcookie可以用更多的参数调用,像这样:
setcookie(name,value,expire,path,domain,secure)
注意路径和域值。我过去遇到过两个不同的页面因为路径/域名不同而找不到对方的cookie的问题。
我注意到你重定向到"../index.php"。尝试重定向到"index.php",看看那里是否存在cookie。如果是,那么您应该使用一个通用的"path"变量来设置cookie。
来自http://www.php.net/setcookie关于"path"变量:
cookie在服务器上可用的路径。如果设置为'/',cookie将在整个域内可用。如果设置为'/foo/', cookie将只在/foo/目录和所有子目录(如/foo/bar/)中可用。默认值是cookie正在设置的当前目录。
可能是因为$userinfo是一个数组。必须是字符串,要存储多个项目需要多个cookie