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);
?>
答案 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);