这是我正在使用的简单功能:
public function control() {
$string = 'lolcheck';
setcookie($string, $string, time() + 120, $this->path, $this->domain);
if (isset($_COOKIE[ $string ])) return true;
else return false;
}
问题是它只在我打开页面两次时才有效,因为它获取了之前设置的cookie。
显然每个人都建议使用这种做法,但它不适合我。
我错过了什么吗?
答案 0 :(得分:2)
Cookie无法正常工作。设置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扩展程序可以帮助您发现何时发送的内容。