2011-04-02 74 views
2

我目前正在开发一个PHP网站。我试图设置一个cookie来存储用户ID。这是为了登录系统,我需要用户ID能够将它添加到MySQL数据库中的不同表中。PHP Cookie问题

当用户成功登录时,会创建一个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">'; 
} 

如果我删除元刷新,只是使用$ _COOKIE [“用户ID”]它工作正常,但呼应的cookie,当我尝试使用$ _COOKIE [“用户ID”] index.php页面上后,已经完成了元刷新,它没有显示任何东西。

任何帮助将不胜感激。谢谢

+2

为什么不将刷新作为标题发送呢?无需使用元标记 - 如果您可以发送Cookie标题,也可以发送刷新标题。 – ThiefMaster 2011-04-02 21:17:34

+0

@ThiefMaster如果我使用标题重定向它的错误,因为我输出HTML到屏幕 – Boardy 2011-04-02 21:18:59

+1

你在测试什么浏览器?有些浏览器仅允许您在POST请求中设置Cookie。 – Naatan 2011-04-02 21:22:19

回答

5
setcookie('userID', $row['use_id'], 0, "/"); 

编辑:零到期时间。

您的cookie对index.php不可见,因为它已从子目录中的脚本设置。所以对上层页面不可见。您应该将cookie路径(第四个参数)设置为“/”,并且该cookie将在整个域中可用。

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

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

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

+0

'如果设置为0或省略,则cookie将在会话结束时(当浏览器关闭时)过期。刷新页面并不会关闭浏览器,我想这不会是一个解决方案.. – Rihards 2011-04-02 21:20:01

+0

这没有什么区别,当你不设定cookie计数浏览会话时。 – Naatan 2011-04-02 21:21:23

+1

非常好,这工作正常。它需要具备所有这些参数才能工作。如果我删除了最后2个参数中的任何一个,出于某种原因它将停止工作。但是,他们很好。再次感谢 – Boardy 2011-04-02 21:29:59

2

如果索引页目录高于您设置cookie的目录,则Cookie将不会在索引页中可用。我建议你使用位置标题重定向。希望这会帮助你。