web-dev-qa-db-fra.com

Que sont les sessions? Comment travaillent-ils?

Je commence tout juste à commencer à apprendre le développement d’applications Web en utilisant python. Je rencontre les termes "cookies" et "sessions". Je comprends les cookies dans la mesure où ils stockent des informations dans une paire de valeurs clés sur le navigateur. Mais j'ai un peu de confusion en ce qui concerne les sessions. Lors d'une session, nous stockons également des données dans un cookie sur le navigateur de l'utilisateur.

Par exemple, je me connecte avec username='rasmus' et password='default'. Dans un tel cas, les données seront publiées sur le serveur qui est censé vérifier et me connecter si authentifié. Cependant, pendant tout le processus, le serveur génère également un identifiant de session qui sera stocké dans un cookie de mon navigateur. À présent, le serveur stocke également cet ID de session dans son système de fichiers ou son magasin de données.

Mais sur la base de l'identifiant de session uniquement, comment pourrait-il connaître mon nom d'utilisateur lors de ma prochaine visite du site? Stocke-t-il les données sur le serveur comme un dicto où la clé serait un identifiant de session et des détails tels que username, email etc. soient les valeurs?

Je suis assez confus ici. Besoin d'aide pour.

294
Rasmus

Étant donné que HTTP est sans état, pour associer une demande à une autre demande, vous devez disposer d'un moyen de stocker les données utilisateur entre les demandes HTTP.

Les cookies ou les paramètres d'URL (par exemple, comme http://example.com/myPage?asd=lol&boo=no ) sont deux moyens appropriés de transporter des données entre 2 demandes ou plus. Cependant, ils ne sont pas appropriés si vous ne souhaitez pas que les données soient lisibles/modifiables côté client.

La solution consiste à stocker ce côté serveur de données, à lui attribuer un "identifiant" et à laisser le client connaître (et le transmettre à chaque demande http) cet identifiant. Voilà, sessions mises en place. Ou vous pouvez utiliser le client comme stockage à distance pratique, mais vous pouvez également chiffrer les données et conserver le côté serveur secret.

Bien sûr, il y a d'autres aspects à prendre en compte, comme vous ne voulez pas que les personnes assistent à des sessions de détournement d'autrui, vous voulez que les sessions ne durent pas éternellement, mais qu'elles expirent, etc.

Dans votre exemple spécifique, l'ID utilisateur (par exemple, un nom d'utilisateur ou un autre ID unique dans votre base de données d'utilisateurs) est stocké dans les données de session, côté serveur, après une identification réussie. Ensuite, pour chaque requête HTTP que vous recevez du client, l'ID de session (fourni par le client) vous indiquera les données de session correctes (stockées par le serveur) contenant l'ID d'utilisateur authentifié - ainsi votre code saura quel utilisateur il parle à.

357
Luke404

Explication simple par analogie

Imaginez que vous êtes dans une banque et que vous essayez de retirer de l’argent sur votre compte. Mais il fait noir; la banque est d'un noir de fumée: il n'y a pas de lumière et vous ne pouvez pas voir votre main devant votre visage. Vous êtes entouré de 20 autres personnes. Ils se ressemblent tous. Et tout le monde a la même voix. Et tout le monde est un méchant potentiel. En d'autres termes, HTTP est sans état.

Cette banque est un type de banque amusant. Pour les besoins du débat, voici comment cela fonctionne:

  1. vous faites la queue (ou en ligne) et vous parlez au caissier: vous faites une demande de retrait d’argent, puis
  2. vous devez attendre brièvement sur le canapé et 20 minutes plus tard
  3. vous devez aller chercher votre argent auprès du caissier.

Mais comment le caissier va-t-il vous différencier des autres?

Le caissier ne peut pas vous voir ou vous reconnaître facilement, rappelez-vous, car toutes les lumières sont éteintes. Et si votre caissier donnait votre retrait de 10 000 $ à quelqu'un d'autre - la mauvaise personne?! Il est absolument essentiel que le caissier puisse vous reconnaître comme étant celui qui a effectué le retrait, afin que vous puissiez obtenir l'argent (ou la ressource) que vous avez demandé.

Solution:

Lorsque vous apparaissez pour la première fois devant le caissier, il vous dit quelque chose en secret:

"Chaque fois que vous me parlez," dit le caissier, "vous devriez d'abord vous identifier comme GNASHEU329 - de cette façon, je sais que c'est vous".

Personne d'autre ne connaît le code secret.

Exemple de retrait d'argent:

Je décide donc d'aller me détendre pendant 20 minutes, puis de me rendre au caissier et de lui dire: "J'aimerais récupérer mon retrait"

Le caissier me demande: "qui es-tu ??!"

"C'est moi, M. George Banks!"

"Prouve le!"

Et puis je leur dis mon mot de passe: GNASHEU329

"Certainement Monsieur Banks!"

C'est comme ça qu'une session fonctionne. Cela permet d’être identifié de manière unique dans une mer de millions de personnes. Vous devez vous identifier chaque fois que vous traitez avec le caissier.

Si vous avez des questions ou si vous avez des doutes, merci de poster un commentaire et j'essaierai de le clarifier.

Explication via des images:

Sessions explained via Picture

67
BKSpurgeon

"Session" est le terme utilisé pour désigner le temps que l'utilisateur parcourt sur un site Web. Il est censé représenter le temps écoulé entre leur première arrivée sur une page du site et le moment où ils cessent d'utiliser ce site. En pratique, il est impossible de savoir quand l'utilisateur a fini avec le site. Sur la plupart des serveurs, un délai d’expiration met automatiquement fin à une session, à moins que le même utilisateur ne demande une autre page.

La première fois qu'un utilisateur se connecte, un certain type d'identifiant de session est créé (sa méthode dépend du logiciel du serveur Web et du type d'authentification/de connexion que vous utilisez sur le site). Comme les cookies, cela n’est généralement plus envoyé dans l’URL car c’est un problème de sécurité. Au lieu de cela, il est stocké avec un tas d'autres éléments que nous appelons collectivement la session. Les variables de session ressemblent à des cookies - ce sont des paires nom-valeur envoyées avec une demande de page et renvoyées avec la page du serveur - mais leurs noms sont définis dans une norme Web.

Certaines variables de session sont passées sous la forme en-têtes HTTP . Ils sont échangés dans les coulisses de chaque navigation de page pour ne pas apparaître dans le navigateur et ne pas dire à tout le monde quelque chose qui peut être privé. Parmi ceux-ci figurent USER_AGENT, ou le type de navigateur demandant la page, REFERRER ou la page associée à la page demandée, etc. Certains logiciels de serveurs Web ajoutent leurs propres en-têtes ou transfèrent des données de session supplémentaires spécifiques au logiciel serveur. Mais les standards sont assez bien documentés.

J'espère que ça t'as aidé.

36
Tim Rourke

HTTP est un protocole de connexion sans état, c'est-à-dire que le serveur ne peut pas différencier les différentes connexions d'utilisateurs différents.

Vient ensuite le cookie. Dès qu'un client se connecte pour la première fois à un serveur, celui-ci génère un nouvel identifiant de session, qui sera ensuite envoyé au client en tant que valeur de cookie. Et à partir de maintenant, cet identifiant de session identifiera cette connexion client car, dans chaque requête HTTP, il verra l'identifiant de session approprié dans les cookies.

Désormais, pour chaque identifiant de session, le serveur conserve une structure de données qui lui permet de stocker des données spécifiques à l'utilisateur. Cette structure de données vous permet d'appeler de manière abstraite une session.

19
Artem Barger

Pensez à HTTP comme à une personne (A) qui a une perte de mémoire à court terme et qui oublie chaque personne dès qu'elle disparaît.

Maintenant, pour se souvenir de différentes personnes, A prend une photo de cette personne et la conserve. La photo de chaque personne a un numéro d'identification. Lorsque cette personne revient à la vue, elle indique son numéro d'identification à A et A trouve leur photo par numéro d'identification. Et voila !!, A sait qui est cette personne.

C'est pareil avec HTTP. Il souffre d'une perte de mémoire à court terme. Il utilise Sessions pour enregistrer tout ce que vous avez fait en utilisant un site Web, puis lorsque vous revenez, il vous identifie à l'aide de Cookies (le cookie est comme un jeton). L'image est la session ici, et l'ID est le cookie ici.

4
Luv33preet