似乎未设置PHP cookie superglobal

似乎未设置PHP cookie superglobal,php,cookies,Php,Cookies,我目前正在开发一个PHP网站。我正在尝试设置一个cookie来存储用户id。这是用于登录系统的,我需要用户id才能将其添加到MySQL数据库的不同表中 当用户成功登录时,它会创建一个PHP会话和一个cookie,然后使用元标记刷新来指向索引页面 if ($row = mysql_fetch_array($result)) { setcookie('id', $row['use_id']); $_SESSION['user'] = $username; setcookie(

我目前正在开发一个PHP网站。我正在尝试设置一个cookie来存储用户id。这是用于登录系统的,我需要用户id才能将其添加到MySQL数据库的不同表中

当用户成功登录时,它会创建一个PHP会话和一个cookie,然后使用元标记刷新来指向索引页面

if ($row = mysql_fetch_array($result))
{
    setcookie('id', $row['use_id']);
    $_SESSION['user'] = $username;
    setcookie('userID', $row['use_id']);
    echo '<meta http-equiv="refresh" content="0;url=../index.php">';
}
if($row=mysql\u fetch\u数组($result))
{
setcookie('id',$row['use_id']);
$\会话['user']=$username;
setcookie('userID',$row['use_id']);
回声';
}
如果我删除元刷新,只使用
$\u cookie['userID']
回显cookie,效果很好,但在完成元刷新后尝试在index.php页面上使用
$\u cookie['userID']
时,它不会显示任何内容

setcookie('userID', $row['use_id'], 0, "/");
编辑:过期时间为零

您的cookie对于index.php不可见,因为它是从子目录中的脚本设置的。因此,它对于较高级别的页面不可见。您应该将cookie路径(第4个参数)设置为“/”,cookie将在整个域中可用

这就是为什么您的cookie对index.php不可见的原因

header('Location: ../index.php');
                  ^^^

您已将页面重定向到更高的目录级别,但未为整个域设置cookie。

如果索引页面目录高于设置cookie的目录,则该cookie在索引页面中将不可用。我建议您使用位置头进行重定向。希望这对您有所帮助。

为什么不将刷新也作为标题发送?无需使用元标记-如果可以发送cookie标头,也可以发送刷新标头。@ThiefMaster如果我使用标头,则会重定向错误,因为我正在将HTML输出到屏幕。您在哪个浏览器中测试?有些浏览器只允许您在POST请求中设置cookie。@Naatan我已经尝试了Google Chrome Development Build、普通Google Chrome和IE9,您能给我们显示设置cookie的页面的响应标题吗?
如果设置为0或省略,cookie将在会话结束时过期(当浏览器关闭时).
刷新页面不会关闭浏览器,我想这不是一个解决方案。.当您不设置浏览会话的cookie计数时间时,这没有什么区别。很好,这很好。它需要具备所有这些参数才能工作。如果我删除最后两个参数中的任何一个,由于某种原因它将停止工作。但和他们在一起很好。再次感谢,最重要的参数是非常重要的!它允许整个域中所有页面的cookie可见性。