2010-04-22 74 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);