Comment effacer la httpsession, si l'utilisateur ferme le navigateur dans java

J'essaie d'effacer le HttpSession si le consommateur ferme la fenêtre du navigateur. Je ne sais pas comment le faire, Aidez-moi, n'importe qui

Merci et salutations Chakri

Si vous pouviez demander au navigateur (de manière fiable) d'avertir le serveur que l'utilisateur avait fermé la fenêtre, le serveur pourrait appeler session.invalidate() selon la réponse d'origine fournie par ejay_francisco.

La difficulté consiste à faire en sorte que la notification se fasse de manière fiable. Il existe diverses façons de détecter la fermeture de la fenêtre; Par exemple, tel qu'il est couvert par ces questions (et similaire):

  • Essayer de détecter l'événement proche du navigateur
  • Javascript pour vérifier quand la fenêtre du navigateur est proche
  • Javascript détecter navigateur fermer l'onglet / fermer le navigateur

Vous pouvez ensuite écrire le (javascript) gestionnaire d'événements proches pour envoyer une requête spécifique au serveur.

Cependant, je ne pense pas qu'un système puisse traiter les cas où le navigateur de l'utilisateur décède, la machine de l'utilisateur est fermée et des scénarios similaires. Donc, si vous avez besoin que la session soit effacée à 100%, vous n'êtes probablement pas sorti. Je ne pense pas que cela puisse être fait.

Il peut être archivé de manière peu différente.

  1. Utilisez un événement javascript appelé "window.onbeforeunload"

    Par exemple window.onbeforeunload = mylogic_function (); Function mylogic_function () {window.location.href = "chemin d'accès à la servlet qui inavalide la session"; }

  2. Avoir une servlet dédiée qui fonctionne uniquement pour désactiver la session

Essayez ceci … ça va fonctionner

EDITÉE:

Essayez de lire la réponse sur cette page

"HTTP n'est pas un protocole de conversation continue où le client se connecte au serveur et échange des informations de manière asynchrone jusqu'à ce que le client se déconnecte.

Au lieu de cela, chaque demande de client HTTP agit comme s'il se connecte, fait une chose, puis se déconnecte. Ce cycle de requête / réponse se répète jusqu'à ce que le client cesse d'envoyer des requêtes.

À NON heure, le serveur a autorisé à envoyer une réponse au client, à moins qu'il ne soit en réponse à une demande réelle spécifique et qu'une seule réponse est permise par demande.

Ainsi, vous ne pouvez pas avoir un serveur afficher une page "vous expiré" sur le client. Le plus proche que vous puissiez obtenir est de répondre avec une page de réponse «vous étiez expiré» si / lorsque le client fait une demande.

L'autre chose courante que les gens veulent faire, c'est d'informer le serveur que le client a fermé un navigateur, une fenêtre ou un onglet. Il n'y a pas de protocole défini pour le World Wide Web pour faire face à cela. Si l'utilisateur ferme une fenêtre / onglet du serveur, le client n'est pas informé du serveur. Puisqu'il n'y a pas de session en cours à supprimer (rappelez-vous, la connexion ne dure que suffisamment longtemps pour que le serveur accepte une demande et renvoie une réponse), il n'y a aucun moyen pour le serveur de savoir si le client est parti.

RÉSUMÉ:

VOUS NE POUVEZ PAS LE FAIRE

Possible solution de contournement:

Vous devez simplement compter sur le délai d'attente de la session. Le délai d'attente pourrait se produire à tout moment et vous ne pouvez même pas savoir si l'utilisateur regarde même l'une de vos pages lorsque cela se produit. Il est probable qu'ils ne regardent pas les vidéos de chatons à l'époque.

Réponse courte: vous ne pouvez pas. Heureusement, les sessions expirent automatiquement après une période de temps; Vérifiez la documentation de votre moteur de servlet pour voir comment définir cette période d'expiration.

J'ai senti qu'il devrait y avoir un moyen de le faire à partir de JavaScript; Malheureusement, JavaScript ne semble pas avoir un gestionnaire onWindowClose.

Si vous fermez le navigateur, il est déjà clair la session

Mais si vous voulez forcer à effacer la session

Utiliser session.invalidate(); Ou si vous souhaitez supprimer une session spécifique, utilisez session.removeAttribute("<sessionName>");