probleme avec les cookies

Le problème exposé dans ce sujet a été résolu.

Bonsoir chers amis j’ai un probleme avec les cookies et je n’arrive pas à bien comprendre.

Lorsque mon utilisateur se connecte et decide de rester connecter je crée plusieurs cookies comme ci-dessous:

if($_POST['rester_connecter']){
   setcookie('id_utilisateur', $resultat['id_utilisateur'], time() + 28*24*3600, null, null, false, true);
   setcookie('login', $resultat['pseudo_utilisateur'], time() + 28*24*3600, null, null, false, true);
   setcookie('sessionid', $_SESSION['sessionid'], time() + 28*24*3600,null, null, false, true);
   setcookie('var1', $resultat['var1'], time() + 28*24*3600, null, null, false, true);
   setcookie('var2', $resultat['var2'], time() + 28*24*3600, null,null, false, true);
   setcookie('nom1', $_SESSION['nom1'], time() + 28*24*3600,null, null, false, true);
   setcookie('nom2', $_SESSION['nom2'], time() + 28*24*3600, null, null, false, true);
   setcookie('adresse_photo', $resultat['adresse_photo'], time() + 28*24*3600, null, null, false, true);
   setcookie('amis', $resultat['amis'], time() + 28*24*3600,null, null, false, true);
}

Mais lorsque l’utilisateur revient et j’essaye de charger ces cookies elles n’existent plus pourtant elles sont bien crées.

Merci pour toutes vos suggestions.

+0 -0

Bonjour Watanga96,

La raison c’est que tu crées ton cookie après avoir envoyé ton tampon de sortie. J’entends ici tout contenu affiché ; par exemple du HTML. Si tu as affiché "<!DOCTYPE html>" ou tu as exécuté la commande "echo", tu ne peux pas créer après ça un cookie.

Pour quelle raison ? C’est simplement lié au protocole HTTP qui transmet dans un premier temps l’entête de la réponse avant de transmettre le corps de la page. Or les cookies se trouvent dans l’entête et à la demande le navigateur fabrique les cookies en question ; ils seront renvoyés par la suite à chaque requêtes faites au serveur.

Note : tu peux outrepasser cette limite (même si ce n’est pas propre) en exécutant un code JS qui créera le cookie. C’est extrêmement rare d’utiliser cette bidouille, c’est tout de même le signal d’une erreur fondamentale de conception.

Edit : d’ailleurs je ne comprends pas la logique de transférer des données sessions dans plusieurs cookies…

+0 -0

Ils existent côté client ? (outils de développement > stockage ou un truc dans le genre par exemple)

Ou la valeur implicite du paramètre path de tes setcookie et l’emplacement de cet autre script à un autre endroit de l’arborescence de ton site sont "incompatibles", ce qui fait qu’ils ne sont pas envoyés ?

HS : il y a besoin de tout ça pour rester connecté ?!? Parce que ta session, avec tout ce qui va dedans et a besoin, tu la recrées à sa reconnexion automatique via le token conservé en cookie

+0 -0

Au fait les cookies sont crée, mais je n’arrive pas a les utiliser, lorsque l’utilisateur ferme son navigateur et revient, lorsque j’essaye d’accéder a ces cookies en faisant écho je ne vois rien.

watanga96

Si c’est un onglet de navigation privée, tu le fermes ça supprime les cookies … Autrement y’a pas de raison, à moins que la durée d’expiration soit trop faible (ou égale à zéro) ce qui ne semble pas être le cas. Il peut aussi s’agir d’un problème entre deux sous-domaines, la protection CORS peut te l’interdire.

Es-tu sûr qu’ils sont bien disponibles côté client ? console.log(document.cookie) pour s’en assurer.

Merci les gars tout fonctionne bien. Le souci c’est qu' il y a un attribut sessionid qui n’a pas été crée dans mon serveur de production, j’avais oublié.

Comme il ne faut pas faire confiance au cookie a chaque fois que l’utilisateur se connecte je m’assure que tous ces cookies correspondent bien a un utilisateur de mon site et comme l’attribut sessionid n’existe pas il ramenait toujours false or quand il ramène false je procédé a unr déconnexion de cet utilisateur automatiquement en supprimant les cookies existants et en lui demandant de ce connecté.

Merci a vous de vous êtes intéressée a mon sujet.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte