此代码段无法正确设置Cookie的任何原因?

时间:2011-08-04 14:13:10

标签: php cookies setcookie

这个小小的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>';

?>

3 个答案:

答案 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的多个项目