Les cookies PHP : résoudre le Notice: Undefined index:

Je n’avais jamais eu à utiliser les très contestés cookies en PHP jusqu’au jour où, fatalement l’on ma demandé d’en mettre en place pour l’authentification sur le long terme.

Le code était très simple à mettre en place, c’était l’affaire de 2 minutes !  Seulement voila, j’y ai passé 1h !

Pourquoi? Impossible de récupérer mon cookie une fois qu’il était créé, il apparaissait bien dans mon Firefox, mais le tableau $_COOKIE de PHP ne le prenais pas en compte ! J’ai finis par trouver d’où venait le problème en analysant les autres cookie qui, eux passaient bien dans mon tableau $_COOKIE.

Le problème venait en fait du fait que je déclarais mon cookie sur une page et que je cherchait à le récuperer sur l’index de mon site.

OR ! La fonction setcookie , dans son extrême fourberie, définit également un  chemin sur le serveur sur lequel le cookie sera disponible et si ce chemin n’est pas précisé, la valeur par défaut est le répertoire courant où le cookie a été défini.

Je déclarais mon cookie dans : http://monsite.com/php/mapage.php donc mon cookie n’était disponible qu’une fois  sur la page http://monsite.com/php/mapage.php et non sur http://monsite.com/index.php.

Résolution du problème ? Les experts vous dirons RTFMN :
Le chemin sur le serveur sur lequel le cookie sera disponible. Si la valeur est ‘/’, le cookie sera disponible sur l’ensemble du domaine domain. Si la valeur est ‘/foo/’, le cookie sera uniquement disponible dans le répertoire /foo/ ainsi que tous ses sous-répertoires comme /foo/bar/ dans le domaine domain. La valeur par défaut est le répertoire courant où le cookie a été défini. source : http://php.net/manual/fr/function.setcookie.php

il suffisait donc de préciser « / » dans le chemin du cookie :

au lieu de :

Baaah !! Une telle perte de temps pour une telle connerie (sans compter le temps qu’il m’a fallu pour rédiger ce post, qui, je l’espère, en fera gagner à mes lecteurs) c’est rageant !

Article rédigé par Idleman

8 réflexions au sujet de « Les cookies PHP : résoudre le Notice: Undefined index: »

  1. JeromeJ

    Ah oui j’avais eu le problème aussi :D

    En parlant de setcookie et afin d’opter pour la sécurité, je conseille de mettre le cookie en httponly afin d’empêcher de pouvoir y accéder via javascript (on est jamais à l’abri d’une faille XSS).
    À ne désactiver qu’en cas où on voudrait justement pouvoir y accéder soit même.

    setcookie($name, $value, mktime(0,0,0, date(« d »),date(« m »), (date(« Y »)+1)),’/’, $_SERVER[« HTTPS »], true);

    Répondre
  2. JeromeJ

    zut, j’ai encore oublier la balise php !

    Répondre
  3. Ganguill

    Un grand merci! 1h de perdue également pour un problème aussi stupide !
    Fallait le trouver, merci pour l’info ;)

    Répondre
    1. Idleman Auteur de l’article

      Pas de quoi, dommage que tu l’ai pas trouvé avant (jvais travailler mon référencement promis ^^)

      Répondre
  4. Neok

    Merci beaucoup, heureusement que ce post était bien placé car sinon j’aurais perdu beaucoup de temps aussi avec cette erreur !

    Répondre
  5. Fabien

    Même 3 ans après la publication, ce billet m’a été bien utile !!

    Apprenant sur le tas la programmation PHP, cela faisait bien plus d’une heure que je galère à comprendre pourquoi je n’arrivait pas à lire un cookie créé par un script appelé en ajax…

    Un grand merci donc !

    Répondre
  6. sheep_knight

    JE T’AIME TELLEMENT ! TU ME SAUVES LA VIE !
    Un grand merci à toi ! :D

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Xo ^_^ :siffle: :p :-( :evil: oO :) T_T <3 :D more »