此代码段不能正确设置cookie的任何原因


Any reason why this code snippet wouldn't set a cookie properly?

这个小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