2010-04-22 4 views
3

L'IETF recommande d'utiliser le codage base64 pour les valeurs de cookies binaires: http://tools.ietf.org/html/draft-ietf-httpstate-cookie-07Comment récupérer la valeur de PHP "setrawcookie"?

J'utiliser setrawcookie(..) mais je ne sais pas quelle variable à utiliser pour récupérer le cookie car $_COOKIE[..] utilise encore le décodage d'URL qui correspond setcookie(..). Cela remplace "+" par "" dans la sortie.

<?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

Êtes-vous sûr que votre cookie est réglé correctement? Vous utilisez 'var_dump' qui affiche certaines données, et après ce cookie ne peut pas être défini de sorte que vous pouvez utiliser un ancien cookie? –

+0

suffit de recharger la page – user250343

Répondre

7

Vous devez utiliser la normale setcookie à la place setrawcookie, de cette façon vous pouvez éviter la situation en essayant d'envoyer cookie avec des caractères non autorisés (cookies ne sera pas défini) et il est la valeur dans le tableau $_COOKIE sera utilisable.

Si vous insistez sur la méthode brute, vous pouvez trouver des cookies envoyés par le navigateur au $_SERVER['HTTP_COOKIE']. Ce sera une chaîne formatée comme key1=value1; key2=value2. Une façon de l'obtenir dans le tableau est de faire exploser simple:

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

var_dump($_RAWCOOKIE);