如何获得PHP“setrawcookie”的价值?

时间:2010-04-22 18:52:40

标签: php http cookies cgi

IETF建议对二进制cookie值使用base64编码: http://tools.ietf.org/html/draft-ietf-httpstate-cookie-07

所以我使用setrawcookie(..)但我不知道用什么变量来获取cookie,因为$_COOKIE[..]仍然使用匹配setcookie(..)的URL解码。这会在输出中将“+”替换为“”。

<?php

var_dump($_COOKIE['TEST']);
$binary_string = "";
for($index = 0; $index < 256; $index++){
    $binary_string .= chr($index);
}
$encoded_data = base64_encode($binary_string);
var_dump($encoded_data);
$cookie_set = setrawcookie('TEST', $encoded_data, time() + 3600);
?>

1 个答案:

答案 0 :(得分:7)

您应该使用正常的 setcookie 而不是setrawcookie,这样您就可以避免在尝试发送带有不允许字符的Cookie时出现这种情况(不会设置Cookie) $_COOKIE数组中的值将可用。

如果您坚持使用原始方法,您可以在 $_SERVER['HTTP_COOKIE'] 中找到浏览器发送的Cookie。这将是字符串格式,如key1=value1; key2=value2。在阵列中获取它的一种方法是进行简单的爆炸:

foreach(explode('; ',$_SERVER['HTTP_COOKIE']) as $rawcookie)
{
    list($k,$v) = explode('=',$rawcookie, 2);
    $_RAWCOOKIE[$k] = $v;
}

var_dump($_RAWCOOKIE);