PHP Cookie不会解析

时间:2011-03-18 19:38:59

标签: php cookies

我正在尝试通过函数发送cookie的值,但它似乎没有解析。这是我正在使用的一段代码:

function displayForm(){
   setcookie("site_Referral", $_GET['rid'], time()+10000);
   $ref_cookie = $_COOKIE['site_Referral'];
   $joinProc = new joinProcessor();
   return $joinProc->process($ref_cookie);
}

当我检查我的数据库时,根本没有任何值。如果我将其更改为:

function displayForm(){
   setcookie("site_Referral", $_GET['rid'], time()+10000);
   $ref_cookie = 'foo';
   $joinProc = new joinProcessor();
   return $joinProc->process($ref_cookie);
}

输入值'foo'就好了。我还尝试检查cookie是否设置正确,它是 - 它出现在Web Developer工具栏上,当我写return $ref_cookie时,它显示正确的值。如果我只使用$_GET值,它也不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题是setcookie实际上没有设置任何内容。它应该被称为“sendcookie”,因为它只涉及制作Set-Cookie HTTP标头。它不会将值存储到$ _COOKIE数组中(仅当PHP首先解析当前请求时才设置它。)

setcookie("abc", "xyz");    // Sends cookie header
print $_COOKIE["abc"];      // Read  existing cookie of CURRENT request

$ setCO后,$ _COOKIE数组将在下一个请求中更新。

直接在您的代码段中使用临时veriable:

function displayForm(){
   setcookie("site_Referral", $ref_cookie = $_GET['rid'], time()+10000);
   ...

答案 1 :(得分:1)

php.net所述,setcookie()定义了与其他HTTP标头一起发送的Cookie。这意味着它不会立即在_COOKIE中设置Cookie。您可以在下一页加载时访问它,假设在调用setcookie()之前没有输出任何其他标题(包括任何空格)。