PHP中的cookie检测问题

时间:2010-12-30 15:26:26

标签: php cookies

这是我正在使用的简单功能:

public function control() {
    $string = 'lolcheck';

    setcookie($string, $string, time() + 120, $this->path, $this->domain);

    if (isset($_COOKIE[ $string ])) return true;
    else return false;
}

问题是它只在我打开页面两次时才有效,因为它获取了之前设置的cookie。

显然每个人都建议使用这种做法,但它不适合我。

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

Cookie无法正常工作。设置cookie后,在下一个请求之前,它不可用(即存在相应的$_COOKIE密钥)。

实际发生的是:

  • 客户端发送请求
  • 服务器发送包含 Set-Cookie 响应标头字段
  • 的响应

之后,客户端发送cookie以及以下任何请求:

  • 客户端发送包含相应 Cookie 请求标头字段
  • 的请求
  • 服务器注册$_COOKIE密钥

答案 1 :(得分:1)

the docs

  

在下次加载可以看到Cookie的网页之前,Cookie才会显示。要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。过期时间通过expire参数设置。调试cookie存在的一种好方法是简单地调用print_r($ _ COOKIE);。

如果您需要在同一页面上访问它,请改用会话,或在setcookie电话后重定向到同一网址。

答案 2 :(得分:0)

Cookie是作为http标头交换的一部分设置/接收的,因此,在通常情况下是客户端(浏览器)发送/接收的第一件事。对于您的问题,客户端只知道它有第二个请求发送的cookie。

使用像Live HTTP Headers这样的好的Firefox扩展程序可以帮助您发现何时发送的内容。