2010-04-22 11 views
3

IETF의 이진 쿠키 값을 base64로 인코딩을 사용하는 것이 좋습니다 : http://tools.ietf.org/html/draft-ietf-httpstate-cookie-07PHP "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

쿠키를 올바르게 설정 했습니까? 일부 데이터를 출력하는'var_dump'를 사용하고 있으며이 쿠키를 설정할 수 없으므로 일부 오래된 쿠키에서 작동 할 수 있습니까? –

+0

방금 ​​페이지를 새로 고침하십시오. – user250343

답변

7

당신은 (쿠키가 설정되지 않습니다)하지 허용되는 문자와 쿠키를 보내려고 할 때 상황을 피할 수있는이 방법을 setcookie 대신 setrawcookie 정상 사용해야하며 $_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); 
관련 문제