This post traite un problème similaire.
Sans que vous ayez spécifié plus de détails, il est difficile de répondre correctement à votre question. Tout d'abord, si un utilisateur ouvre un autre onglet ou une fenêtre dans le même navigateur, ils seront toujours connectés en utilisant le login précédent. C'est un comportement normal.
Si un utilisateur se connecte à l'aide d'un autre navigateur, puis une chose que vous pouvez faire:
- enregistrer un HttpSessionListener
- lorsqu'une session est créée, en utilisant
void sessionCreated(HttpSessionEvent se)
, vérifier si les informations d'identification de l'utilisateur et l'identifiant de session sont dans votre base de données
- sinon, les mettre dans une table de base de données
- si oui, annule la session précédente en supprimant les informations d'identification précédentes dans la base de données
- lorsqu'une session est détruite, en utilisant
void sessionDestroyed(HttpSessionEvent se)
supprimer les informations d'identification de l'utilisateur dans la base de données
Une autre chose. Si vous utilisez cette approche, vous devrez vérifier chaque demande de navigateur si les informations d'identification de votre utilisateur sont stockées dans une base de données. Vous pouvez utiliser une servlet filter pour cela. Ce sera, bien sûr, un surcoût.
Encore une chose. S'il existe une exception dans votre code de création/destruction de session, il existe un risque que les informations d'identification de l'utilisateur ne soient pas correctement éliminées dans la base de données. Vous pouvez gérer cela en utilisant des déclencheurs de base de données pour supprimer les lignes qui sont aussi vieux que le délai d'attente de votre session.