107 votes

Que sont les cookies et les sessions, et comment sont-ils liés les uns aux autres ?

J'essaie de comprendre les cookies et les sessions de manière professionnelle. Je sais que lorsqu'un navigateur se connecte à un serveur, le serveur "demande" au navigateur de "coller" un cookie avec "phpsessid" dans le dossier des cookies du navigateur du client.

Maintenant que nous avons le "phpsessid", si le client entre sur le serveur, le navigateur envoie au serveur le "phpsessid" et le serveur jette un coup d'oeil au dossier tmp et si nous avons une correspondance, il recharge toutes les données que l'utilisateur a pour ce client, mais je suis un peu confus avec le processus.

Je serais reconnaissant si quelqu'un pouvait m'aider à comprendre ces processus de création d'une session et de cookies - ce qui se passe en coulisses.

207voto

Second Rikudo Points 59550

Faisons le tour de la question :

Cookies y sessions sont tous deux des moyens de préserver l'état de l'application entre les différentes requêtes effectuées par le navigateur. C'est grâce à elles que, par exemple, vous n'avez pas besoin de vous connecter à chaque fois que vous demandez une page de StackOverflow .

Cookies

Les cookies sont de petits morceaux de données (d'une longueur maximale de 4 Ko), qui contiennent des données dans une paire clé-valeur :

name=value; name2=value2

Ceux-ci sont définis soit par JavaScript ou via le serveur en utilisant un En-tête HTTP .

Les cookies ont une date d'expiration définie, par exemple à l'aide des en-têtes HTTP :

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

Ce qui amènerait le navigateur à créer un cookie nommé name2 avec une valeur de value2 qui expirerait dans environ 9 ans.

Les cookies sont considérés comme fortement insécurisé car l'utilisateur peut facilement manipuler leur contenu. C'est pourquoi vous devez toujours valider les données des cookies . Ne supposez pas que ce que vous obtenez d'un cookie est nécessairement ce que vous attendez.

Les cookies sont généralement utilisés pour préserver l'état de connexion, où un nom d'utilisateur et un hachage spécial sont envoyés par le navigateur, et le serveur les vérifie dans la base de données pour autoriser l'accès.

Les cookies sont également souvent utilisés dans sessions création.

Sessions

Les sessions sont légèrement différentes. Chaque utilisateur reçoit un ID de la session qui est renvoyé au serveur pour validation soit par cookie ou par GET variable .

Les sessions sont généralement de courte durée, ce qui les rend idéales pour sauvegarder l'état temporaire entre les applications. Les sessions expirent également lorsque l'utilisateur ferme le navigateur.

Les sessions sont considérées comme plus sûres que les cookies car les variables elles-mêmes sont conservées sur l'ordinateur de l'utilisateur. serveur . Voici comment cela fonctionne :

  1. Le serveur ouvre une session (définit un cookie via l'en-tête HTTP).
  2. Le serveur définit une variable de session.
  3. Page des modifications apportées par le client
  4. Le client envoie tous les cookies, ainsi que l'ID de session de l'étape 1.
  5. Le serveur lit l'ID de la session à partir du cookie.
  6. Le serveur fait correspondre l'ID de la session à une liste dans une base de données (ou dans la mémoire, etc.).
  7. Le serveur trouve une correspondance, lit les variables qui sont maintenant disponibles sur $_SESSION superglobal.

Si PHP ne trouve pas de correspondance, il démarre une nouvelle session, et répète les étapes de 1 à 7.

Vous pouvez stocker des informations sensibles dans une session car elles sont conservées sur le serveur, mais sachez que l'ID de session peut toujours être volé si l'utilisateur, par exemple, se connecte via un réseau WiFi non sécurisé. (Un attaquant peut renifler les cookies et les définir comme les siens, il ne verra pas les variables elles-mêmes, mais le serveur identifiera l'attaquant comme l'utilisateur).


C'est l'essentiel. Vous pouvez en apprendre davantage sur ces deux sujets dans le manuel PHP.

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