IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Détruire les variables session et vider la session dans la méthode logout


Sujet :

Spring Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Détruire les variables session et vider la session dans la méthode logout
    Bonjour,

    Je développe un site web en Spring/hibernate. J'utilise des variables à portée session (exemple variable "Cart" qui représente un panier de shoping). Je voudrais savoir comment je peux détruire ces variables et vider ma session dans ma méthode "logout" ? J'ai cherché sur le net mais je n'ai pas trouvé une solution.

    Ci-dessous mon code :

    Dans spring-servlet.xml, je déclare mon bean à portée session en utilisant un proxy :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <bean id="cart" class="atr.gestionmagasin.attribute.Cart" scope="session">
          <!-- this next element effects the proxying of the surrounding bean -->
          <aop:scoped-proxy />
          </bean>
    J'ai un service qui gère cette variable session :
    CartServiceImpl.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
     
    @Service("cartService")
     
     
    public class CartServiceImpl implements CartService {
     
    	Cart cart;
     
    	public Cart getCart(){
    		return cart;
    	}
    	public void setCart(Cart cart){
    		this.cart= cart;
     
    	}
     
     
     
    }
    et dans mon controler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @Autowired
    private CartService cartServiceImpl;
    //Je récupère ma variable cart dans le controler en utilisant //cartServiceImpl.getCart()
    J'ai essayé cette méthode pour détruire ma variable session et vider ma session lors de l'appel à la méthode logout mais ça ne marche pas, j'ai eu une excéption : Cart cannot be cast to org.springframework.aop.scope.ScopedObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @RequestMapping(value = "/logout")
     
    	 public String disconnectUser(Model model){
     
    //Récupérer la variable session "Cart".
    ScopedObject cscob = (ScopedObject) cartServiceImpl.getCart();
    //Supprimer la variable session de la session
    cscob.removeFromScope();
     
    	 return "Client_index";
    		}
    Quelqu'un a une proposition svp ?

    Merci.

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    as tu essayer d´avoir ta session en cours et de la detruire?
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HttpSession session = request.getSession();
    session.invalidate();
     session = request.getSession(false);
    Eric

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci Eric pour ta réponse.

    En fait je n'utilise pas le paramètre HttpServletRequest request dans les
    Méthodes de mon controler. Comment je peux récupérer mon
    objet request?

    Merci.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé de faire un session.invalidate() mais ça ne marche toujours pas, les variable session gardent toujours leurs valeurs. Ci-dessous le code que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     @RequestMapping(value = "/logout")
     
    	 public String disconnectUser(Model model, HttpServletRequest request){
     
    		 HttpSession session = request.getSession();
    		 session.invalidate();
    		  session = request.getSession(false);
    model.addAttribute("cart", cartServiceImpl.getCart());
     
    	 return "Client_index";
    		}
    J'ai aussi essayé de vérifier le contenu de session en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpSession session = request.getSession();
    Enumeration attributeNames =
    		      		session.getAttributeNames();
    		 System.out.println(attributeNames.hasMoreElements());
    Mais attributeNames.hasMoreElements() retourne "false", c'est à dire session ne contient pas d'attribut.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Une fois ta session invalidée, tout tes objet spring en scope session disparaitront à la fin de la requete.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Le problème c est que je vois toujours mes variable session initialisées (panier et utilisateur connecté) sur mes pages jsp après l exexution de la méthode logout et la session.invalidate().

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu peux vérifier qu'entre les deux (avant et après le logout), le JSESSIONID dans les cookies du navigateur a bien changé?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    La valeur de JSESSIONID a changé avant et après le logout :

    JSESSIONID avant le logout : 8F147D775ECDEA8E7852C7DBFB54EA4D
    JSESSIONID après le logout : A231B74EF051A060544F8B000A19D2EE

    Est ce que cela signifie que session.invalidate() s'est bien déroulé ?

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par triam Voir le message
    La valeur de JSESSIONID a changé avant et après le logout :

    JSESSIONID avant le logout : 8F147D775ECDEA8E7852C7DBFB54EA4D
    JSESSIONID après le logout : A231B74EF051A060544F8B000A19D2EE

    Est ce que cela signifie que session.invalidate() s'est bien déroulé ?
    Oui, donc si tu retrouve ton panier, je suppose que d'une manière ou d'une autre, tu le recrée après la fermeture de la session.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    La création des variables sessions ne se fait que dans la méthode login.
    Je ne vois pas où ces variables ont pu être créées

    Est ce que cela peut être du au fait que j'utilise des variables session en utilisant un proxy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <bean id="cart" class="atr.gestionmagasin.attribute.Cart" scope="session">
          <!-- this next element effects the proxying of the surrounding bean -->
          <aop:scoped-proxy />
          </bean>
    et un service pour accéder à cette variable ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    @Service("cartService")
     
     
    public class CartServiceImpl implements CartService {
     
    	Cart cart;
     
    	public Cart getCart(){
    		return cart;
    	}
    	public void setCart(Cart cart){
    		this.cart= cart;
     
    	}
     
     
     
    }

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je me suis rendu compte que j'ai un autre problème, mes variables session ne sont pas liés à la session de l'utilisateur, elles gardes la même valeur pour tous les clients de l'application web. Je m'explique :

    - Je me connecte avec un User A avec IE. User A met à jour les deux variables sessions : currentUser = UserA
    cart= contenu du panier du UserA

    - Je me connecte ensuite avec un autre utilisateur User B avec Google Chrome :
    User A met à jour les deux variables :
    currentUser = UserB
    cart = contenu du panier du UserB

    => Quand je reviens sur la page IE du user A, ce user voit lui aussi les deux variables currentUser et cart mis à jour avec les valeurs "UserB" et contenu du panier du UserB.

    Quelqu'un peut m'expliquer ce comportement? Y'a t-il quelque chose qui manque à la configuration des mes beans sessions? Ou bien cette méthode de déclaration de bean session ( <aop:scoped-proxy />) ne répond pas à mon besoin ?

    Merci de votre aide.

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    on peux voir la configuration de CartService dans les fichiers xml? Si je me base uniquement sur tes annotation, le Cart qui est dans le CartServiceImpl n'a rien à voir avec le Cart défini dans spring comme scoped-proxy, c'est juste un champ. Si le service est commun à tous, alors le Cart sera commun à tous. Je pense qu'il te manque un @Autowired sur le Cart dans CartServiceImpl.

Discussions similaires

  1. Mettre les variables de différentes tables en session
    Par infirmier59 dans le forum Langage
    Réponses: 4
    Dernier message: 08/02/2010, 16h53
  2. Réponses: 27
    Dernier message: 27/09/2008, 22h56
  3. Réponses: 1
    Dernier message: 14/02/2007, 09h57
  4. Réponses: 7
    Dernier message: 15/05/2006, 13h36
  5. Détruire les variables d'une session
    Par kespy13 dans le forum Langage
    Réponses: 6
    Dernier message: 05/05/2006, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo