48 votes

Comment puis-je définir un cookie et ensuite rediriger en PHP ?

Après avoir effectué un peu de traitement, je veux définir une valeur de cookie pour l'entrée de l'utilisateur, puis le rediriger vers une nouvelle page. Cependant, le cookie ne s'installe pas. Si je commente la redirection, le cookie est défini avec succès. Je suppose qu'il s'agit d'un problème d'en-tête en quelque sorte. Quelle est la meilleure solution de contournement pour cette situation ?

if($form_submitted) {
    ...
    setcookie('type_id', $new_type_id, time() + 60*60*24*30);
    header("Location: $url");
    exit;
}

Notez que setcookie renvoie true dans les deux cas et je ne reçois aucune erreur/avis/préavis.

EDIT : J'utilise Unix/Apache/MySQL/PHP.

1 votes

Avez-vous essayé de paramétrer le cookie après le header() ?

0 votes

Sikx - Le cookie ne s'installe pas non plus si j'utilise header() en premier.

0 votes

J'ai eu un problème où Location: http://domain.com/asd ne sauverait pas le cookie. En faisant Location: /asd a résolu le problème pour moi.

0voto

user2573099 Points 27

J'ai fait une solution pour cela

    setcookie(self::SESSION_NAME, $session_id, $expires, '/', null, null, true);
    header("Set-cookie: ".self::SESSION_NAME."=".$session_id."; expires=".date('D, Y-M-d H:i:s', $expires)." GMT; path=/; HttpOnly; secure=true; SameSite=Strict");

//check is something printed
    if (!headers_sent()) {

//is there any header set
                if( !array_map(function($header){ return preg_match('/Set-cookie/i', $header) ? true : null; }, headers_list()) ){

                    die(header('Location: ' . $url));
                }
            }
            die('<script type="text/javascript">window.location.href = ' . ($append ? 'window.location.href' : '') . ($append && $url ? '+' : '') . ($url ? '"' . $url . '"' : '') . ';</script>');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X