2009-11-16 4 views
24

Comme HTTP est un protocole sans état, lorsqu'un client envoie un certain nombre de requêtes au serveur, comment le serveur identifie-t-il de façon unique les requêtes d'un client particulier sur une période de temps, par exemple t1, t2, t3 ..Suivi de session HTTP

J'ai navigué sur le Web et suis tombé sur des termes tels que l'identifiant de session, la réécriture d'URL et les cookies. Mais ce serait génial si quelqu'un l'explique mieux. Spécifiquement quelle partie de la requête HTTP et de la réponse serait utilisée pour le suivi de session?

Répondre

38

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 envoyées au serveur. Cela signifie qu'à chaque fois qu'un client 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. Lorsque vous utilisez des cookies, le serveur demande au client de stocker un cookie en définissant l'en-tête de réponse HTTP Set-Cookie. 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 envoyé au serveur par le client en utilisant l'en-tête de demande Cookie HTTP sur chaque demande et ainsi le serveur est informé sur chaque requête de l'identifiant de session actuellement affecté au client. Lorsque vous utilisez la réécriture d'URL, ce même ID de session est envoyé quelque part dans l'URL lors de l'utilisation de la réécriture d'adresses 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 vous assurer que toutes les URL dans les pages Web envoyées au client sont également réécrits pour contenir cet ID de session de clients particuliers. 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 ne parvient pas à définir un cookie de session sur le client, ce qui implique que le client ne prend pas en charge/n'accepte 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.

+0

Merci pour l'info .. :) – dexter

+2

@RickNZ ne perdez pas la foi en SO - Je n'ai pas copié votre réponse. Si vous vérifiez mes révisions, vous verrez que j'ai commencé par expliquer les sessions HTTP. J'ai ensuite passé du temps à vérifier les formats d'exemple de JSESSIONID dans les cookies et les URL, et à confirmer les noms d'en-tête HTTP. J'ai ensuite ajouté ceux-ci à mon poste quand j'étais sûr qu'ils étaient corrects. Il n'est pas surprenant que des questions comme celle-ci donnent des réponses similaires, mais si vous vous sentez encore lésé, je voterai volontiers pour supprimer ma réponse. – teabot

+1

@teabot: pas de soucis; c'est parfait. – RickNZ

2

Le suivi de session est une opération côté serveur.

Un serveur Web émet un identificateur de session renvoyé au navigateur. Le navigateur soumet cet identifiant de session avec chaque requête.

Ceci est probablement fait en utilisant des cookies de manière transparente pour l'utilisateur.

1

La gestion de session est dans la plupart des cas gérée en envoyant un cookie au client. ce cookie serait renvoyé au serveur à chaque requête de ce client particulier. Le session id sera associé à certaines ressources côté serveur (fichier, espace mémoire), de sorte que le serveur en lisant le session id dans le cookie peut trouver cette ressource et ensuite savoir quel client il était.

9

Plus précisément quelle partie de la requête HTTP et la réponse serait utilisée pour le suivi de la 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 retourne alors la valeur de tous les cookies qui correspondent aux propriétés qui ont été définies avec le cookie, ce qui peut inclure 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 de propriété d'origine 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é en tant qu'index dans une table de hachage ou dans une table de base de données contenant des informations d'état uniques par utilisateur.

+0

c'était vraiment utile. merci .. – dexter

0

Trouver suffisamment de détails here

Sessions HTTP sont l'approche recommandée. Une session identifie les demandes provenant du même navigateur pendant la période de conversation. Toutes 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:

HttpSession session = request.getSession(); // renvoie la session en cours ou une nouvelle session

Les sessions peuvent être expirées (configurées dans web.xml) ou invalidées manuellement.