Si vous souhaitez accéder à la valeur d'un cookie immédiatement après avoir appelé la fonction setcookie()
vous ne pouvez pas utiliser $_COOKIE
. La raison en est la nature du protocole (voir https://www.rfc-editor.org/rfc/rfc6265 ). Lorsque vous utilisez setcookie()
il définit un cookie à envoyer avec le reste des en-têtes HTTP au client (voir http://php.net/manual/en/function.setcookie.php ). Mais $_COOKIE
d'autre part, contient des variables transmises au script actuel via des cookies HTTP. du client ( http://php.net/manual/en/reserved.variables.cookies.php ).
Lorsque vous changez $_COOKIE
après avoir appelé setcookie()
- comme le recommandent certaines réponses ici - il ne contient plus seulement les cookies du client. Cela pourrait interférer avec les hypothèses faites dans le code tiers utilisé dans votre application et pourrait entraîner des effets indésirables sur le site. En général, ce n'est donc pas une bonne pratique et ce n'est une option que lorsque les appels de setcookie()
font partie de votre propre code.
Une manière propre et transparente d'obtenir un ensemble de valeurs avec setcookie()
dans la même demande est d'utiliser headers_list()
(voir http://php.net/manual/en/function.headers-list.php ) :
function getcookie($name) {
$cookies = [];
$headers = headers_list();
// see http://tools.ietf.org/html/rfc6265#section-4.1.1
foreach($headers as $header) {
if (strpos($header, 'Set-Cookie: ') === 0) {
$value = str_replace('&', urlencode('&'), substr($header, 12));
parse_str(current(explode(';', $value, 1)), $pair);
$cookies = array_merge_recursive($cookies, $pair);
}
}
return $cookies[$name];
}
// [...]
setcookie('uname', $uname, time() + 60 * 30);
echo "Cookie value: " . getcookie('uname');
_Mais remarquez que cela ne fonctionnera pas avec l'interface de programmation de PHP (par exemple PHPUnit). Dans ce cas, vous pouvez utiliser des extensions tierces comme XDebug (voir http://xdebug.org/docs/all_functions#xdebug_get_headers )._
0 votes
Malheureusement, les réponses ici n'offrent pas de solution ou suggèrent de mauvaises solutions de contournement, même si elles sont acceptées. stackoverflow.com/questions/3230133#34465594 .
0 votes
@witrin votre lien semble rediriger vers cette même q/a.
2 votes
Ce n'est pas possible. Vous devez "faire semblant", soit en définissant les entrées correspondantes dans le fichier
$_COOKIE
ou en effectuant immédiatement une redirection (vers la même page).