如何获得PHP"setrawcookie"的价值?

use*_*343 3 php cookies cgi http

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

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

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

dev*_*ler 7

你应该用正常setcookie来代替setrawcookie,这种方式试图发送的cookie不允许的字符(cookie将不会被设置),当你能避免的情况和它的价值$_COOKIE阵列将可以使用.

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

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

var_dump($_RAWCOOKIE);
Run Code Online (Sandbox Code Playgroud)