2010-04-22 37 views
3

的IETF推荐使用base64编码二进制cookie值: http://tools.ietf.org/html/draft-ietf-httpstate-cookie-07如何获得PHP“setrawcookie”值?

于是我就用setrawcookie(..),但我不知道该用什么变量获得饼干回来,因为$_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

你确定你的cookie设置正确吗?你正在使用'var_dump'来输出一些数据,并且在这个cookie不能被设置之后,你可能会使用一些旧的cookie? – 2010-04-22 20:41:01

+0

只需重新加载页面 – user250343 2010-04-23 00:09:21

回答

7

你应该用正常setcookie代替setrawcookie,这种方式试图发送的cookie不允许的字符(cookie将不会被设置),当你能避免的情况,它是在$_COOKIE数组值将是可用的。

如果你坚持原始的方法,你可以找到浏览器发送的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);