这个小小的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>';
?>
答案 0 :(得分:4)
Tory,在PHP中调用set setcookie
之前,请确保没有输出任何内容。甚至没有白色空间。没有回音。没有。我猜你的脚本会在setcookie之前输出一些东西,这会破坏你的脚本。你看到标题已发送错误吗?注释掉你的JS,然后检查。你以这种方式setcookie
setcookie(name,value,expire,path,domain,secure);
域需要像example.com
这样的字符串中的域名值,它是可选的。 Secure需要一个布尔值并且是可选的。跳过这两个并通过设置路径'/'
答案 1 :(得分:3)
函数setcookie返回true或false,具体取决于cookie是否设置成功。你可以试试这个来测试:
if(!setcookie("user", $userinfo, $expire)) {
echo 'Could not set cookie!';
}
如果这返回false,那么Kumar是对的。否则必须有其他原因。
编辑可以使用更多参数调用setcookie,如下所示:
setcookie(name,value,expire,path,domain,secure)
注意路径和域值。我过去遇到过两个不同页面的问题因为路径/域名不同而找不到彼此的cookie。
我注意到你重定向到“../index.php”。尝试重定向到“index.php”,看看那里是否存在cookie。如果是,那么您应该使用通用的“路径”变量来设置cookie。
从http://www.php.net/setcookie关于“路径”变量:
可在其上使用cookie的服务器上的路径。如果设置为“/”,则cookie将在整个域中可用。如果设置为'/ foo /',则cookie只能在/ foo /目录和所有子目录中使用,例如/ foo / bar / of domain。默认值是设置cookie的当前目录。
答案 2 :(得分:2)
可能是因为$ userinfo是一个数组。它必须是一个字符串,用于存储您需要多个cookie的多个项目