demande.getSession(faux) ne retourne pas null après l'appel de session.invalidate()
Ne devrait pas invalider une session cause request.getSession(false)
à retourner la valeur null? Dans ma déconnexion servlet j'appelle
session.invalidate();
et dans mon état de connexion du filtre j'appelle
request.getSession(false);
L'appel à getSession(faux) ne retourne jamais nul, mais tous les attributs associés à la session de l'objet retourné sont nulles. Je suis actuellement détecter si un utilisateur est connecté par la recherche de nulle attributs, mais cela ne semble pas juste.
Il y a peut être quelque chose de bien en cours d'exécution entre les deux (après invalider et avant getsession), qui est la création de la session. Êtes-vous à l'aide de la plaine des servlets ou quelque chose d'autre aussi (spécialement celui qui exige de la session, par exemple à base de composants cadres comme JSF peut être configuré pour enregistrer les etats sur le serveur qui nécessite session)?
Plaine les servlets pas de cadre
Je vais regarder autour et voir si je suis le coupable appelant demande.getSession(true) quelque part.
Comment êtes-vous la navigation à partir de
La déconnexion de la servlet est disponible lorsque vous allez à la "/Déconnexion", mais la déconnexion de filtre d'état des filtres à chaque demande, de sorte que si un utilisateur est connecté et va à la page d'accueil ils voient les membres de la page au lieu de l'écran de connexion. Tout cela fonctionne. Je viens d'être pointilleux sur le fait de tuer une session et pas seulement la dépouillant les attributs, ce qui semble être de toutes les sessions.invalidate ().
Plaine les servlets pas de cadre
Je vais regarder autour et voir si je suis le coupable appelant demande.getSession(true) quelque part.
Comment êtes-vous la navigation à partir de
Logout
Servlet pour LoginStatus
filtre, après l'invalidation de la session?La déconnexion de la servlet est disponible lorsque vous allez à la "/Déconnexion", mais la déconnexion de filtre d'état des filtres à chaque demande, de sorte que si un utilisateur est connecté et va à la page d'accueil ils voient les membres de la page au lieu de l'écran de connexion. Tout cela fonctionne. Je viens d'être pointilleux sur le fait de tuer une session et pas seulement la dépouillant les attributs, ce qui semble être de toutes les sessions.invalidate ().
OriginalL'auteur Usman Mutawakil | 2013-01-28
Vous devez vous connecter pour publier un commentaire.
C'est également l'approche normale. Pour vérifier si un utilisateur est connecté, vous devez sûrement pas vérifier si le servletcontainer a créé la session ou pas. Cela ne représente pas l'utilisateur connecté.
Sur login, il suffit de mettre le modèle de l'utilisateur de l'objet dans l'étendue de session sans vérifier si le conteneur a créé la session pour vous. En d'autres termes, il suffit d'utiliser
getSession()
sans argument booléen, de sorte que le conteneur autocreate si nécessaire, vous besoin la session à ce point quand même:Sur le filtrage d'accès, il suffit de vérifier si la session de l'attribut représentant l'utilisateur connecté est présent, vous utilisez uniquement
getSession(false)
ici pour éviter la création de session, sinon, par exemple searchbots pourrait déclencher la création de session qui est totalement inutile:Sur déconnexion, assurez-vous d'envoyer une redirection après l'invalider, parce que la session en cours est toujours disponible dans la réponse de l'avant.
Je devine que la redirection est une méthode plus rapide de forcer le navigateur pour effacer le cache que de s'opposer à l'approche spécifié ici stackoverflow.com/questions/4194207 ?
Prévention au navigateur de mettre en cache les pages à accès restreint résout complètement le problème est différent de demande/réponse ici. Si vous n'avez pas de désactiver le cache du navigateur, puis l'utilisateur peut encore voir les pages à accès restreint en appuyant sur le bouton de retour. Si vous désactivez le cache du navigateur, alors l'utilisateur sera redirigé vers la page de connexion en appuyant sur le bouton de retour.
Quel est le but de la redirection, alors si vous n'êtes pas à l'utiliser pour forcer un rafraîchissement?
Parce que, comme l'a dit, la session en cours est toujours disponible dans la réponse de l'avant.
OriginalL'auteur BalusC
pour chaque servlet ou jsp vous voyagez, vous devriez appeler
sauf pour vous, la première page où vous créez le sessionby
si vous ne vous appelez
ensuite, la session n'est pas menée jusqu'à cette page
donc, avant de vous appeler
assurez-vous de poursuivre la séance à cette page en appelant
vous appelez "session.invalidate();" ryt ?? êtes-vous sûr que la page où yo appel de cette ligne est d'avoir la session , si ce n'est , plz appel "demande.getSession(false);" la ligne dans la page , peut-être que je ne suis pas l'obtention de votre problème correctement , mais après avoir fait sûr de cela , nous pouvons arriver à comprendre
Oui. J'ai toujours appeler getSession(faux), sauf lorsque je veux créer une session lors de la connexion. Je comprends le concept, et je suis en mesure de vous connecter et d'accéder à toutes les fonctionnalités qui nécessitent attributs stockés dans ma session. Le problème est que lorsque je tente de vous déconnecter tout ce qui se passe lors de l'invalidation d'une session, c'est que tous les attributs sont supprimés, mais la session n'aller nulle. Je pensais que c'était mon code mais je pense que c'est tout simplement la façon dont il est. Merci pour l'aide quand même.
OriginalL'auteur Hussain Akhtar Wahid 'Ghouri'