2016-05-09 2 views
1

Considérons ce scénarioEst-il possible d'invalider une httpsession d'une autre session en utilisant l'identifiant de session?

connexions adam utilisateur dans websiteA en utilisant webbrowserA avec EMAILID [email protected] une session est créée ici et l'identifiant de session est stocké dans la base de données

Ensuite, les connexions adam utilisateur dans websiteA en utilisant webbrowserB avec EMAILID [email protected] une session est créée ici et l'identifiant de session est stocké dans la base de données

lorsque les connexions adam utilisateur à l'aide webbrowserB, je dois annuler la session qui a été créée à l'aide webbrowserA (en supposant session webbrowserA est active) . comment invalider la session créée en utilisant webbrowserA en utilisant son sessionid ou d'autres moyens possibles?

Technologie: Java, SpringMVC, Sqlserver2008

Répondre

2

Spring Security a Concurrent Session Control qui ferait ce que vous demandez.

+0

ty pour plus de détails. Je vous le ferai savoir après avoir vérifié cela. mis en œuvre à l'aide du filtre de printemps et de stocker des données dans la base de données de session. Je vais vérifier cela aussi – divine

1

Il n'existe aucun moyen direct d'invalider une session d'une autre session. Mais vous pouvez stocker dans un attribut ServletContext une liste d'identifiants de session qui ne devraient plus être acceptés.

Ensuite, vous pouvez simplement utiliser un filtre pour chaque demande si les tests de la session en cours existe et fait partie de cette liste. Si c'est le cas, vous pouvez l'invalider à partir du filtre.

Pour votre cas d'utilisation, le plus simple serait de conserver dans un attribut ServletContext un HashMap<String, Integer> mappant l'ID de session en cours pour un courrier d'utilisateur et de stocker dans chaque session (dans un attribut de session) le courrier électronique de l'utilisateur - Pour cela, vous avez juste besoin de mettre à jour ces attributs après chaque connexion réussie.

Le vous utilisez un filtre qui teste si la session en cours est déjà connecté (e-mail contient un) et si l'ID est l'ID enregistré pour cet e-mail. Si ce n'est pas l'identifiant enregistré, le filtre invalide la session et redirige vers la page de connexion (ou vers une page expliquant que la session a été fermée à cause d'un autre login avec le même identifiant)

peut faire automagically pour vous si vous utilisez le contrôle de session simultanée comme dit par @bernie.

+0

ty pour plus de détails. Je vous le ferai savoir après avoir vérifié cela. mis en œuvre à l'aide du filtre de printemps et de stocker des données dans la base de données de session. Je vais vérifier cela aussi – divine