web-dev-qa-db-fra.com

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 client.

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

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

56
Blanktext

Passons par là:

Cookies et sessions sont les deux façons de préserver l'état de l'application entre les différentes requêtes du navigateur. C'est grâce à eux que, par exemple, vous n'avez pas besoin de vous connecter chaque fois que vous demandez une page sur StackOverflow .

Biscuits

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, soit via le serveur en utilisant un En-tête HTTP.

Les cookies ont un ensemble datetime d'expiration, par exemple en utilisant des en-têtes HTTP:

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

Ce qui entraînerait le navigateur à définir un cookie nommé name2 avec une valeur de value2, qui expirerait dans environ 9 ans.

Les cookies sont considérés très peu sécurisés car l'utilisateur peut facilement manipuler leur contenu. C'est pourquoi vous devriez toujours valider les données des cookies . Ne présumez 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 à partir du navigateur, et le serveur les compare à la base de données pour approuver l'accès.

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

Séances

Les sessions sont légèrement différentes. Chaque utilisateur obtient un identifiant de session , qui est renvoyé au serveur pour validation soit par cookie ou par variable GET .

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

Les sessions sont considérées comme plus sécurisées que les cookies car les variables elles-mêmes sont conservées sur le 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 du 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 session à partir du cookie.
  6. Le serveur correspond à l'ID de session d'une liste dans une base de données (ou mémoire, etc.).
  7. Le serveur trouve une correspondance, lit les variables qui sont maintenant disponibles sur $_SESSION superglobale.

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

Vous pouvez stocker des informations sensibles sur une session car elles sont conservées sur le serveur, mais sachez que l'ID de session peut toujours être volé si l'utilisateur, disons, s'est connecté via un 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 étant l'utilisateur).


C'est l'essentiel. Vous pouvez en savoir plus sur le manuel PHP sur les deux sujets.

138
Madara Uchiha