4

我正在使用以下语法在 localhost 上设置一个 cookie

setcookie("testCookie ", "hello cookie", false, "/", false);

问题是我第一次访问创建cookie并显示firebug的页面

Cookie testCookie added.  hello cookie

但它不读取值。如果我刷新页面,则会读取该值并显示触发错误

Cookie testCookie changed.  hello cookie

第一次加载页面时,如何获取要读取的 cookie 的值?

4

2 回答 2

10

正如我在评论中所说的那样,根据您的描述(尽管相当模糊且不太容易理解),我认为问题可能是您试图在将 cookie 发送到服务器之前对其进行读取。

cookie 的工作方式如下:

  1. 你提出请求
  2. 服务器将 cookie 标头发送回客户端
  3. 页面加载 - 在此页面加载时 Cookie对 PHP不可见
  4. 刷新
  5. 客户端向服务器发送 cookie 标头
  6. 服务器收到 cookie 标头,因此 PHP 可以读取它
  7. 页面加载 - Cookie在此处可见。

如果您还没有尝试过,请再次刷新!

由于您想在设置它的同时读取它,只需存储您设置的值并使用它。或者(尽管这是未经测试的),您可以在$_COOKIE数组中手动​​设置它。

所以是这样的:

setcookie("helloworld", .. );
$_COOKIE['helloworld'] = $value;

然后就可以正常阅读了。请注意,我真的不建议覆盖自动超全局的值(对于$_REQUEST, $_POST,$_GET等也是如此),而是建议您只存储您正在设置的值并使用它。


另一种方法是使用“网关”的形式,这意味着您将在网关页面上设置 cookie,然后它将继续将您重定向到下一页。

例如,假设您的流程如下:login.php-> account.php。而不是将您的登录表单直接发布给account.php您有 2 个选项。

选项 1:POST 回 login.php,设置 cookie,然后重定向到account.php. 选项 2:有一个网关,例如logincheck.phpPOST 到那个,设置 cookie,然后重定向到account.php.

这样,account.php总能看到你的cookie。

于 2011-05-09T11:18:22.733 回答
3

它可能相关或不相关,但您将布尔值分配给期望整数或字符串的参数。如果您是 PHP 新手,那么仔细阅读手册并理解函数签名非常重要。在这种情况下,您必须检查http://php.net/setcookie,您可以在其中阅读:

bool setcookie ( 字符串 $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]])

另外,当我运行您的代码时,我会收到警告:

Warning: Cookie names cannot contain any of the following '=,; \t\r\n\013\014'
于 2011-05-09T11:15:05.090 回答