Étant donné que HTTP est un protocole sans état, lorsqu'un client fait un certain nombre de demandes au serveur, comment le serveur identifie-t-il de manière unique les demandes d'un client particulier sur une période de temps, par exemple t1, t2, t3.
J'ai parcouru le Web et suis tombé sur des termes comme l'identifiant de session, la réécriture d'URL et les cookies. Mais ce serait bien si quelqu'un l'expliquait mieux. Plus précisément, quelle partie de la demande et de la réponse HTTP serait utilisée pour le suivi de session?
Comme vous l'avez mentionné, les méthodes courantes pour implémenter le suivi de session HTTP incluent la réécriture d'URL et les cookies. Le suivi de session nécessite essentiellement qu'un ID de session soit conservé sur plusieurs demandes adressées au serveur. Cela signifie que chaque fois qu'un client donné fait une demande au serveur, il transmet le même ID de session. Le serveur peut utiliser cet ID pour rechercher les informations de session qu'il gère.
Lors de l'utilisation de cookies, le serveur demande au client de stocker un cookie en définissant le Set-Cookie
En-tête de réponse HTTP. Ce cookie contient l'ID de session unique attribué à ce client - dans cet exemple, la chaîne "ABAD1D":
Set-Cookie: JSESSIONID=ABAD1D;path=/
Le cookie est ensuite renvoyé au serveur par le client en utilisant l'en-tête de requête HTTP Cookie
sur chaque requête et ainsi le serveur est informé à chaque requête de l'ID de session actuellement attribué au client.
Cookie: JSESSIONID=ABAD1D
Lorsque vous utilisez la réécriture d'URL, ce même ID de session est envoyé à la place quelque part dans l'URL. Encore une fois, le serveur extrait l'ID de session de l'URL afin qu'il puisse rechercher la session pour un client particulier:
http://my.app.com/index.jsp;JSESSIONID=ABAD1D
Cependant, le serveur doit également s'assurer que toutes les URL des pages Web renvoyées au client sont également réécrites pour contenir cet ID de session client particulier. Comme l'ID de session est codé dans les URL, cette méthode de suivi de session est transparente pour le navigateur. Souvent, un serveur aura recours à la réécriture d'URL s'il constate qu'il est incapable de définir un cookie de session sur le client, ce qui implique que le client ne prend pas en charge/n'autorise pas les cookies.
Notez que les sessions peuvent expirer. Cela signifie que si le serveur ne "voit" pas un ID de session donné pendant un certain temps, il peut supprimer les données de session pour préserver les ressources.
Plus précisément, quelle partie de la demande et de la réponse HTTP serait utilisée pour le suivi de session?
Dans la réponse HTTP, le serveur peut définir un cookie. Il le fait avec l'en-tête Set-Cookie. Par exemple:
Set-Cookie: session=12345; path=/
Le client renvoie ensuite la valeur de tous les cookies qui correspondent aux propriétés définies avec le cookie, qui peuvent inclure le chemin (comme ci-dessus) et le domaine, et qui n'ont pas encore expiré.
Le cookie est renvoyé au serveur dans le cadre des en-têtes HTTP. Par exemple:
Cookie: session=12345
Aucune des informations d'origine sur la propriété n'est renvoyée avec le cookie.
Un cookie unique permet au serveur d'associer une clé unique à une instance de navigateur particulière. Le serveur peut ensuite utiliser cette clé comme index dans une table de hachage ou une table de base de données contenant des informations d'état uniques par utilisateur.
Le suivi de session est une chose côté serveur.
Un serveur Web émet un identifiant de session qui est renvoyé au navigateur. Le navigateur soumet cet identifiant de session avec chaque demande.
Cela se fait probablement en utilisant des cookies de manière transparente pour l'utilisateur.
le traitement de la session se fait dans la plupart des cas en envoyant un cookie au client. ce cookie serait renvoyé au serveur à chaque demande de ce client particulier.
Le session id
sera associé à certaines ressources côté serveur (fichier, espace RAM) donc le serveur en lisant session id
dans le cookie peut trouver cette ressource et savoir de quel client il s'agit.
Trouvez suffisamment de détails ici
Les sessions HTTP sont l'approche recommandée. Une session identifie les requêtes provenant du même navigateur pendant la période de conversation. Tous les servlets peuvent partager la même session. Le JSESSIONID est généré par le serveur et peut être transmis au client via des cookies, une réécriture d'URL (si les cookies sont désactivés) ou un mécanisme SSL intégré. Des précautions doivent être prises pour minimiser la taille des objets stockés dans la session et les objets stockés dans la session doivent être sérialisables. Dans une servlet Java la session peut être obtenue comme suit:
Session HttpSession = request.getSession (); // retourne la session en cours ou une nouvelle session
Les sessions peuvent être expirées (configurées dans web.xml) ou invalidées manuellement.