Qu'est-ce que la gestion de session en Java?


J'ai également fait face à cette question dans mon interview. J'ai beaucoup de confusion avec la portée de la session et la gestion informatique en java.

Dans le web.xml nous avons l'entrée:

<session-config>
        <session-timeout>
            30
        </session-timeout>
</session-config>

Qu'indique-t-il réellement ? Est-ce la portée de l'ensemble du projet ?

Un autre point qui me confond est comment pouvons-nous séparer la portée de la session de plusieurs requêtes dans le même projet? Signifie que si je me connecte à partir d'un PC et en même temps que je me connecte à partir d'un autre PC, le différencie-t-il ?

Aussi, une autre chose déroutante est la différence de navigateur. Pourquoi les différents Gmails peuvent-ils s'ouvrir dans différents navigateurs ? Et Gmail peut empêcher une session de se connecter à la déconnexion. Comment est-il maintenu avec notre web personnel ?

Author: jdphenix, 2010-06-18

6 answers

La gestion de session n'est pas limitée à Java et aux servlets. Voici à peu près comment cela se passe:

  1. Le protocole HTTP est sans état, de sorte que le serveur et le navigateur doivent avoir un moyen de stocker l'identité de l'utilisateur via plusieurs requêtes
  2. Les navigateurs envoient la première requête au serveur
  3. Le serveur vérifie si le navigateur s'est identifié avec le cookie de session (voir ci-dessous)

    3.1. si le serveur ne "connaît" pas le client:

    • Le serveur crée un nouvel identifiant unique et le place dans une carte (grosso modo), en tant que clé, dont la valeur est la session nouvellement créée. Il envoie également une réponse de cookie contenant l'identifiant unique.

    • Le navigateur stocke le cookie de session (avec lifetime = la durée de vie de l'instance du navigateur), contenant l'identifiant unique, et l'utilise pour chaque requête suivante afin de s'identifier de manière unique.

    3.2. si le serveur sait déjà le client-le serveur obtient la Session correspondant à l'identifiant unique passé trouvé dans le cookie de session

Maintenant sur quelques questions que vous avez:

  • Le délai d'expiration de session est le temps à vivre pour chaque entrée de carte de session sans être accessible. En d'autres termes, si un client n'envoie pas de demande pendant 30 minutes (à partir de votre exemple), le mappage de session supprimera cette entrée, et même si le client s'identifie avec la clé unique dans la session cookie, aucune donnée ne sera présente sur le serveur.

  • Différents gmails (et quel que soit le site) peuvent être ouverts dans différents navigateurs car le cookie de session est par navigateur. C'est-à-dire que chaque navigateur s'identifie de manière unique en n'envoyant pas l'id de session unique, ou en envoyant un que le serveur a généré pour lui.

  • La journalisation à partir de différents PC est la même en fait-vous ne partagez pas un identifiant de session

  • La déconnexion supprime en fait l'entrée pour le id de session sur le serveur.

Remarque: l'id de session unique peut également être stocké:

 25
Author: Bozho, 2014-03-20 05:19:10

Qu'indique-t-il réellement ?

Durée de vie d'une session. La session expire s'il n'y a pas de transaction entre le client et le serveur pendant 30 minutes (par segment de code)

Est-ce la portée de l'ensemble du projet ?

Il a une portée d'application. Défini pour chaque application web

Un autre point me déroutant est comment peut nous séparons la portée de la session de demande multiple dans le même projet? Signifie si je me connecte à partir d'un PC & en même temps, je suis connecté à partir d' un autre PC, le différencie-t-il ?

Oui. Les ID de session (JSESSIONID pour Apache Tomcat) seront différents.

Aussi, une autre chose déroutante est le navigateur différence. Pourquoi ne l' différents Gmails possibles à ouvrir différents navigateurs ?

Chaque connexion par le même utilisateur à partir d'un navigateur différent est une session complètement différente. Et les cookies définis dans un navigateur n'affecteront pas l'autre. Ainsi, différentes instances Gmail sont possibles dans différents navigateurs.

Et Gmail peuvent empêcher une session de Connexion à la Déconnexion. Comment est il entretenu avec notre web personnel ?

Cookies persistants

 2
Author: bdhar, 2010-06-18 05:46:57

Les servlets en Java ont un objet HttpSession que vous pouvez utiliser pour stocker des informations d'état pour un utilisateur. La session est gérée sur le client par un cookie (JSESSIONID) ou peut être effectuée à l'aide de réécritures d'URL. Le délai d'attente de session décrit la durée d'attente du serveur après la dernière demande avant de supprimer les informations d'état stockées dans une session HttpSession.

La portée est par instance de navigateur, donc dans l'exemple que vous donnez la connexion à partir de deux PC différents entraînera deux sessions objet.

 0
Author: Dean Povey, 2010-06-18 05:31:22

Si vous ouvrez la même application dans une fenêtre différente, je veux dire plusieurs instances d'un navigateur, il créera une session différente pour chaque instance.

 0
Author: Lalchand, 2010-06-18 15:50:36

Je recommande Apache Shiro pour la gestion de session,l'authentification et l'autorisation.

Je le reprends.

Comme @BalusC mentionné ci-dessous, seul le conteneur de servlet est en charge de la gestion de la session http. Shiro utilise juste ça. Il se connectera à HttpSession via un filtre que vous définissez explicitement.

 0
Author: Yaniv, 2013-01-13 11:48:34

Nous avons 4 façons de gérer une session.

1.Cookies 2.La réécriture d'URL 3.Champs de formulaire masqués 4.Session HTTP

Le quatrième est puissant et surtout utilisé de nos jours.

 0
Author: user2191576, 2013-03-20 15:33:14