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

Struts 1 Java Discussion :

Problème Session Multi-Utilisateurs


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 131
    Points : 106
    Points
    106
    Par défaut Problème Session Multi-Utilisateurs
    Bonjour à tous,

    j'ai développé une application Struts et jusque là tout se passait bien, sauf que c'est ma première application de ce type et que je ne savais pas qu'il fallait gérer le fait qu'il puisse y avoir plusieurs utilisateurs...enfin je précise, en PHP, quand je crée une variable de session, elle est unique et correspond à l'utilisateur qui l'a créé...et pour ça, je n'ai rien de spécial à faire, juste à lui donner un nom et une valeur.

    Fin bref, ce n'est pas du PHP, et je pense que je dois très mal m'y prendre pour gérer mes variables de session sous Struts, et après recherche, je ne trouve pas de solution qui corresponde à mon souci.

    Mon problème, c'est que quand un utilisateur saisie des données dans le formulaire, je stocke une partie de ces données dans des variables de session.

    Or, lorsqu'il y a plusieurs utilisateurs, mettons que l'utilisateur 1 saisisse quelquechose avant l'utilisateur 2, eh bien l'utilisateur 2 verra apparaître en pré-remplissage dans son formulaire, tout ce qui a été saisi par l'utilisateur 1.

    J'utilise Struts-Layout et de ce fait j'utilise les balises appropriées pour préremplir mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <layout:form action="/addClient" styleClass="FORM" styleId="addClient" >
     
    <!-- Affichage du Formulaire pré-rempli en mode Modification -->
     
          <layout:text property="siren" key="siren" bundle="resources" name="client" maxlength="9" styleClass="FORM" />
     
    </layout:form>
    Pour le formulaire ici présent, il me serait peut être éventuellement possible de mettre le scope à request...mais le souci, c'est que certaines variables sont en session, parce que je les appelle un peu partout... comme c'est le cas du Siren du client que je veux afficher sur toutes les pages de mon application et que j'utilise même dans plusieurs actions.

    J'ai lu des infos à propos de la méthode reset(), mais de ce que j'ai compris, elle ne réinitialise les données qui sont en scope request et pas en session...

    Je vous passe les lignes de codes de ma Servlet dans laquelle je valorise la variable ci dessus (pour simplifier les choses, j'ai résumé le client à une seule propriété : le siren) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    public ActionForward sauvegarde(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
     
    		HttpSession _session=request.getSession();
     
    		ClientForm clientForm=(ClientForm) form;
    		Client client=new Client();
    		BeanUtils.copyProperties(client, clientForm);
    		_session.setAttribute("client", client);
                              return mapping.findForward("success");
    }
    Ici le code pour mon ActionForm :

    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
     
     
    public class ClientForm extends ActionForm {
     
     
    private static final long serialVersionUID = 1L;
     
    private String siren;
     
    public String getSiren() {
          return siren;
    }
     
     
    public void setSiren(String siren) {
          this.siren = siren;
    }
    Merci d'avance de vos réponses et/ou liens vers d'éventuelles pistes.

  2. #2
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Je ne sais pas si cela peut t'aider, mais que se passe t-il si ton Utilisateur 1 se délogue avant l'Utilisateur 2 ? L'utilisateur voit-il les données rentrées par l'utilisateur 1 ? Si oui, tu peux éventuellement faire cela dans ton code de déconnexion :
    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
     
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    try {
           request.getSession().removeAttribute("ID_OBJET_A");
           request.getSession().removeAttribute("ID_OBJET_B");
           request.getSession().removeAttribute("ID_OBJET_C");
           request.getSession().removeAttribute(ConstantRole.USER_KEY);
           request.getSession(false).setMaxInactiveInterval(1);
           request.getSession(false).invalidate();
           return super.execute(mapping, form, request, response);
    } catch (Exception e) {
         ActionMessages messages = new ActionMessages();
         messages.add("Exception", new ActionMessage(ConstantesRessources.ERROR_SDE_REMOTE, e.getMessage()));
         this.saveErrors(request, messages);
         return mapping.findForward(ConstantesForward.ECHEC);
    }
    }

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Montre nous le code de toute ta classe.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu veux dire que plusieurs utilisateurs utilisent le même navigateur sur le même poste (PC) ?

    Je suppose que :

    - l'utilisateur 1 se connecte, bosse, et se déconnecte...
    - l'utilisateur 2 se connecte, bosse, et là, il tombe sur les données de 1

    Si c'est ce cas de figure, il faudrait simplement rajouter dans ta page de login une instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <%
    session.invalidate();
    %>
    De ce fait, la session précédente sera détruite...

    Attention avec les sessions :

    Avec Firefox, même si tu lances plusieurs fenêtres, elles feront référence à la même session côté serveur (vaut mieux le savoir )

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je pensais qu'il parlait pour deux utilisateurs simultanés (donc de machine différente), mais tu fais bien de préciser.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Je pensais qu'il parlait pour deux utilisateurs simultanés (donc de machine différente), mais tu fais bien de préciser.
    Ben c'est pas possible dans ce cas d'avoir la même session (au sens HttpSession)

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Oui je sais bien.
    Mais que les données se mélangent entre les sessions, peut arriver, si on s'y prend mal.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 131
    Points : 106
    Points
    106
    Par défaut
    Bonjour et désolé de revenir vers vous si tardivement...

    Bon, vous fachez pas hein...pas taper !!

    En fait...j'ai fait une grosse bêtise...

    Je me suis focalisé sur les sessions parce que les données affichées étaient bien stockées dans des variables de session. Et je les réinitialisais là où il faut...c'est pour ça que je ne comprenais pas...

    Seulement voilà, j'avais complètement oublié qu'à un moment dans mon développement, il m'était plus facile d'utiliser une statique pour valoriser ces variables de session...oui je sais c'est moche...et cette statique par contre, je ne la gérais pas du tout comme il faut...

    Du coup, j'ai repris mon dev et j'ai supprimer cette statique partout où elle était utilisée...forcément ça marche beaucoup mieux.

    Dans tous les cas, merci de vous être dérangé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème profil multi-utilisateur
    Par dimitrak dans le forum W4 Express
    Réponses: 1
    Dernier message: 04/09/2013, 11h56
  2. Réponses: 2
    Dernier message: 02/07/2009, 10h02
  3. Réponses: 2
    Dernier message: 11/07/2008, 14h07
  4. Session multi utilisateurs
    Par nico-icf dans le forum Access
    Réponses: 9
    Dernier message: 16/01/2007, 16h20
  5. Problème de sauvegarde multi utilisateur
    Par tribaleur dans le forum Access
    Réponses: 2
    Dernier message: 20/06/2006, 15h00

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