Php 为什么这个代码片段不会';你不能把饼干放好吗?

Php 为什么这个代码片段不会';你不能把饼干放好吗?,php,cookies,setcookie,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'];

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

?>
…一些数据库查询。。。

可能是因为$userinfo是一个数组。它必须是一个字符串,要存储您需要的多个cookie的多个项目,请确保在PHP中调用set
setcookie
之前不输出任何内容。甚至连空白都没有。没有回声。没有什么。我猜你的脚本在setcookie之前会输出一些东西,这会破坏你的脚本。您是否看到标头已发送错误?注释掉你的JS,然后检查。你是这样做的

setcookie(name,value,expire,path,domain,secure); 

域需要一个字符串形式的域名值,如
example.com
,它是可选的。安全需要一个布尔值,并且是可选的。跳过这两个选项,并通过将路径设置为“/”进行检查。

函数setcookie返回true或false,具体取决于cookie是否成功设置。您可以尝试以下方法来测试:

if(!setcookie("user", $userinfo, $expire)) {
    echo 'Could not set cookie!';
}
如果返回false,那么Kumar是对的。否则肯定还有其他原因

EDITsetcookie可以使用更多参数调用,如下所示:

setcookie(name,value,expire,path,domain,secure)
请注意路径和域值。我过去遇到过两个不同的页面由于路径/域不同而找不到对方的cookie的问题

我注意到您重定向到“./index.php”。尝试重定向到“index.php”,看看那里是否存在cookies。如果是,则应使用公共“路径”变量设置cookie

从关于“路径”变量:

服务器上的路径,cookie将在其中可用。如果设置为“/”,cookie将在整个域中可用。如果设置为“/foo/”,cookie将仅在/foo/目录和域的所有子目录(如/foo/bar/)中可用。默认值是设置cookie的当前目录


他正在将数组序列化为字符串。@Johan No,
$userinfo=serialize($userinfo)改为逗号分隔的值,即字符串。否,没有已发送错误的标题。我的印象是,当我使用javascript来重定向而不是
header
函数时,不管我是否预先输出了它。另外,
setcookie
是否像
header
一样挑剔?您确定我不能在
setcookie
之前输出任何内容吗?啊,路径在哪里?设置cookie时,您还可以从JS中指定路径,这表明您正在
a.com/folder/setcookie
中设置cookie,而
a.com/checkcookie
可能无法使用该cookie。如果未指定路径,则路径的默认值为当前工作目录,将路径设置为“/”(斜杠),然后选中它。如何设置cookie的路径?Rauni我觉得他在子文件夹中设置cookie,然后在根目录下检查它,看看他重定向到的路径,它不是
/
它的
。/
,因此可能会导致issue@Kumar我怀疑这一点。如何在根目录中设置它?使用
/
,它将被设置为根目录,或者使用
domain.com
作为路径,它应该适合您。看看我的comment@Kumar所以,
setcookie(“user”、$userinfo、$expire”/”?使用谷歌缓存结果:P