2015-03-25 3 views
1

J'ai travaillé avec une application J2EE qui utilise l'authentification basée sur des formulaires. Je comprends les objets HttpSession, et les différents cas d'utilisation qu'ils ont pour stocker les données utilisateur (chariots d'achat par exemple), puisque http est un protocole sans état.Présentation de HttpSessions et de l'authentification

Lorsqu'un client fait une demande (pour, par exemple, ajouter quelque chose à son panier), une session est créée, si elle n'est pas présente, et un panier est créé ou mis à jour dans la session. Lorsque la réponse est renvoyée au client, un cookie HTTP appelé JSessionID fait partie de la réponse et ce cookie est stocké dans le navigateur. Ainsi, lorsque des demandes ultérieures sont faites au serveur (en supposant que les cookies n'ont pas été effacés dans le navigateur, ou que le serveur n'a pas été redémarré, ou que la session n'a pas expiré), la session peut être localisée, et c'est ce qui l'attribut 'statefulness' à un protocole de requête/réponse http autrement sans état.

Mes questions sont les suivantes:

1) Lorsqu'un utilisateur se connecte à une application qui utilise l'authentification basée sur des formulaires, est une session automatiquement créé?

2) Si ce n'est pas le cas, que doit-il se passer pour que l'utilisateur soit réellement déconnecté, puisqu'il n'y a pas de session à invalider? Plus généralement, j'essaie vraiment de comprendre s'il existe une connexion entre un utilisateur HttpSession et l'utilisateur étant «connecté» en ce qui concerne l'authentification basée sur le formulaire. Un utilisateur peut-il être connecté et ne pas avoir de session?

Répondre

0

La réponse à cette question a toujours été dépendante de la plate-forme. WebSphere par exemple n'a pas nécessité une session pour que l'utilisateur soit authentifié, mais nécessite l'utilisation d'un appel de servlet spécifique à WAS pour se déconnecter d'un utilisateur.

Cela a finalement été corrigé dans la spécification Servlet 3.1 (Java EE 7) lorsque HttpServletRequest.logout() a été ajouté.