Question

J'utilise des cookies de session avec mon site Web. À ma grande surprise, j'ai remarqué que si je mets un cookie de session (pas un cookie persistant), ferme un onglet, puis me reconnecte au site, les cookies de session sont toujours présents. Ce n'est pas ce à quoi je m'attendais, en fait. Je m'attendais à ce que les cookies de session soient supprimés.

Si vous fermez le navigateur, un cookie de session est supprimé. Pourquoi ne pas fermer un onglet pour obtenir le même résultat?

Par conséquent, j'utilise PHP5 et jQuery. Y a-t-il quelque chose que je puisse faire pour que, lorsqu'un onglet est fermé, je puisse résoudre ce problème de session? Malheureusement, l'événement onbeforeunload sur la balise BODY n'est pas utile car, lorsque vous cliquez en dehors d'une page, l'événement est déclenché, pas seulement la fermeture d'un onglet.

Était-ce utile?

La solution

Le cookie de session est un processus et non une fenêtre. Ainsi, même si vous sélectionniez Nouvelle fenêtre, vous obteniez toujours le même identifiant de session. Ce comportement a du sens. Vous ne souhaitez pas qu'un utilisateur se reconnecte chaque fois qu'il ouvre une nouvelle fenêtre lorsqu'il navigue sur votre site.

Je ne suis au courant d'aucun moyen réel de contourner ce problème.

Autres conseils

C’est une volonté et essayer de le changer est une très mauvaise idée. Que se passe-t-il si un utilisateur ouvre un lien dans un nouvel onglet et le ferme? La session dans l'onglet d'origine doit-elle être détruite? Bien sûr que non! Cela montre pourquoi vous ne devriez même pas y penser.

Une session se termine à la fermeture de la dernière fenêtre du navigateur. Si vous voulez autre chose, vous:

  1. ne veut pas de sessions;
  2. vous devez créer votre propre " mini-session " infrastructure;
  3. probablement dans un monde de blessures et d'insectes.

Vous pouvez également écrire un javascript qui détecte le moment où un onglet est fermé et supprimer le cookie dans le javascript

Le stockage Web de session peut être utilisé à la place des cookies si vous devez dépendre de la fermeture d'un onglet.

J'ai trouvé un moyen de contourner le problème.

Je travaille dans ASP.NET C # . J'ai une page maître pour toutes les pages du site, à l'exception de la page Login . Dans page principale serveur événement de chargement de page , je reçois le URL de la page de renvoi et vérifie s'il contient la racine du site, si non, je redirige vers la page Login et, comme il n'a pas cette page maître , il s'affiche.

Ceci fonctionne si j'essaie d'accéder à une page d'un autre site ou si j'entre l'URL URL dans la zone d'adresse du navigateur. Ainsi, si vous fermez l'onglet et tentez de le saisir à nouveau ou si vous rouvrez l'onglet, même si le cookie n'a pas été supprimé, vous ne pouvez pas revenir sur le site sans passer par Login . Cela fonctionne également même si vous n'avez pas fermé l'onglet et que vous naviguez entre différents sites dans le même onglet.

C'est le code

   if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root"))
        {
            Response.Redirect("~/Account/Login.aspx");
        }

Lorsque vous naviguez depuis le site, il n'y a pas de problème, même si vous ouvrez un lien vers une autre page du site vers un autre onglet, celui-ci s'ouvre.

Si vous souhaitez également être sûr de pouvoir supprimer le cookie de session et d'authentification dans cette clause if avant de revenir à la page Login .

Cela ne fonctionnera pas lorsqu'un utilisateur accédera à un autre site dans le même onglet et appuiera sur le bouton du navigateur vers le bouton car cela fonctionne sur le cache et n'envoie pas automatiquement une demande au serveur.

Cela ne tue donc pas le cookie de session ou d'authentification lors de la fermeture de l'onglet, mais peut aider à empêcher toute nouvelle entrée sur le site sans se connecter après la fermeture de l'onglet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top