【问题标题】:PHP cookie superglobal does not seem to be setPHP cookie superglobal 似乎没有设置
【发布时间】:2011-04-02 21:15:44
【问题描述】:

我目前正在开发一个 PHP 网站。我正在尝试设置一个存储用户 ID 的 cookie。这是用于登录系统,我需要用户 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">';
}

如果我删除元刷新并仅使用$_COOKIE['userID'] 回显cookie,它可以正常工作,但是当我在完成元刷新后尝试在index.php 页面上使用$_COOKIE['userID'] 时,它不会显示任何内容。

【问题讨论】:

  • 为什么不将刷新也作为标头发送?无需使用元标记 - 如果您可以发送 cookie 标头,您也可以发送刷新标头。
  • @ThiefMaster 如果我使用标题重定向它会出错,因为我正在将 HTML 输出到屏幕
  • 你测试的是什么浏览器?有些浏览器只允许您在 POST 请求中设置 cookie。
  • @Naatan 我已经尝试过 Google Chrome Development Build、普通的 google chrome 和 IE9
  • 你能告诉我们设置cookie的页面的响应头吗?

标签: php cookies


【解决方案1】:
setcookie('userID', $row['use_id'], 0, "/");

编辑:过期时间为零。

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

这就是 index.php 看不到您的 cookie 的原因。

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

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

【讨论】:

  • If set to 0, or omitted, the cookie will expire at the end of the session (when the browser closes). 刷新页面并不会关闭浏览器,我想这不会是一个解决方案..
  • 这没有什么区别,当您没有设置浏览会话的 cookie 计数时间时。
  • 非常好,这很好用。它需要具有所有这些参数才能工作。如果我出于某种原因删除了最后两个参数中的任何一个,它就会停止工作。但是和他们在一起很好。再次感谢
  • 最后一个参数很重要!它允许整个域内所有页面的 cookie 可见性。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 2013-07-02
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多