我正在尝试通过函数发送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
值,它也不起作用。我做错了什么?
答案 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()
之前没有输出任何其他标题(包括任何空格)。