Question

Après un peu de traitement, je souhaite définir une valeur de cookie pour la saisie de l'utilisateur, puis la rediriger vers une nouvelle page. Cependant, le cookie n'est pas en cours d'installation. Si je commente la redirection, le cookie est défini avec succès. Je suppose que c'est un problème d'en-tête. 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 l'un ou l'autre cas et je ne reçois aucune erreur / avertissements / avis.

EDIT: j'utilise Unix / Apache / MySQL / PHP

Était-ce utile?

La solution

Si vous avez des URL ou des sous-dossiers humains (tels que www.domain.com/path1/path2/), vous devez définir le chemin du cookie sur / pour qu'il fonctionne pour tous les chemins, pas seulement pour le chemin actuel.

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

Extrait du manuel PHP:

  

Le chemin sur le serveur dans lequel le   cookie sera disponible sur. Si réglé à   '/', le cookie sera disponible   dans tout le domaine. Si réglé à   '/ foo /', le cookie sera seulement   disponible dans le répertoire / foo /   et tous les sous-répertoires tels que   / foo / bar / du domaine. Le défaut   valeur est le répertoire courant   le cookie est en cours d’installation.

Autres conseils

Je suppose que vous utilisez IIS? Il existe un bogue connu avec les versions IIS inférieures à 7 lorsque vous tentez à la fois de définir un cookie et un en-tête d’emplacement dans la même demande.

http://support.microsoft.com/kb/q176113/

Comment testez-vous si le cookie est défini? Les cookies sont disponibles sur la page suivante après leur configuration.

  

Pièges courants:

     

Les cookies ne deviendront visibles qu'au prochain chargement d'une page pour laquelle le cookie devrait être visible. Pour vérifier si un cookie a été configuré avec succès, recherchez le cookie sur une page de chargement suivante avant son expiration. Le délai d'expiration est défini via le paramètre Expire. Un bon moyen de déboguer sur l’existence de cookies consiste simplement à appeler print_r ($ _ COOKIE);.

J'ai pu résoudre ce problème en utilisant un léger retard dans l'en-tête d'actualisation. Nous définissons l'en-tête (ce qui doit être fait avant toute méthode pouvant générer des résultats, comme setcookie), puis définissons les cookies. J'ai ajouté un message afin que l'utilisateur ne voie pas d'écran vide pendant ces quelques secondes.

    header("refresh: 2; url=$url");
    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
    echo "Processing, please wait...";

Utilisez une URL relative dans l'en-tête:

@Header("Location: orders_9090_1.php");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top