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

Servlets/JSP Java Discussion :

Probleme de session ?


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut Probleme de session ?
    Salut a tous

    J'ai une application (plus de 100 personnes simultané), qui tourne sur tomcat 5.5, développé en java 5 (velocity/servlet)

    Mon problème est le suivant :

    - un utilisateur saisi des données...il enregistre...un écran d'un autre utilisateur d'une autre ville (autre pc...) s'affiche au lieu de ses informations saisis !!
    "Même écran mais données différentes"

    Cette erreur n'est pas fréquente

    Merci d'avance pour votre aide

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ça peut se produire si tu utilise des beans dans le scope application.

  3. #3
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Aucun bean utilisé

    On n'utilise que ces deux methodes :

    session.setAttribute
    session.getAttribute

    Et meme pas de scope application, toutes les données sont stokés au niveau de la session

    Svp c'est urgent, et j'ai beau chercher sur internet sans aucune reel reponse

  4. #4
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    Une question pour éliminer une piste:

    Comment est transmis le session ID par cookie ou par url?

  5. #5
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    On recupere la session a partir du request

    req.getSession()

    Donc on utilise l'url,

  6. #6
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Est ce qu'on doit attacher la reponse a la session recupéré de la request ?

    Si oui, comment on fait svp ?

    Et est ce que ce detail peut resoudre le probleme :

    session = request.getSession(true);

    le "true" : pour créer une nouvelle session si elle n'existe pas (si je ne me trompe pas)

    Et merci d'avance

  7. #7
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par kha_yassine Voir le message
    On recupere la session a partir du request

    req.getSession()

    Donc on utilise l'url,
    Non pas forcément, on récupère la session via l'objet request de la classe HttpServletRequest.

    La sessionid peut soit sauvegardée dans un cookie ou "codé" dans l'url (http://mon.site.com/catalog/produits...onid=2DE83630F

  8. #8
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par kha_yassine Voir le message
    Est ce qu'on doit attacher la reponse a la session recupéré de la request ?

    Si oui, comment on fait svp ?

    Et est ce que ce detail peut resoudre le probleme :

    session = request.getSession(true);

    le "true" : pour créer une nouvelle session si elle n'existe pas (si je ne me trompe pas)

    Et merci d'avance
    Je déconseille de créer une session de cette manière. Dans un traitement, je récupère la session de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    session = request.getSession(false);
    if (session == null) {
      throw ne IllegalStateException("Session n'est pas initialisée");
    }
    Les sessions sont crées dans un endroit unique de mon application (filtre).

  9. #9
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Voici le seul filtre qu'on utilise au moment de l'identification d'un utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
    		HttpServletRequest request = (HttpServletRequest)req;
    		HttpServletResponse response = (HttpServletResponse)resp;
    		if(request.getSession().getAttribute("currentUser")!=null){
    			chain.doFilter(req, resp);
    		}else{
    			RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
    			rd.forward(request, response);
            }
    }
    Est ce que j'introduit la création de la session au niveau de ce filtre ?

    Je vous rappel que ce probleme n'est pas frequent !!

    Merci beaucoup

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par kha_yassine Voir le message

    Je vous rappel que ce probleme n'est pas frequent !!
    ça arrive pour un cas précis ou un utilisateur précis ou aléatoirement?

  11. #11
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Aleatoirement a ce que j'ais constater

    D'après ce que je sache, c'est tomcat qui s'occupe de créer une session pour chaque utilisateur !!
    N'est ce pas ?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je pencherais pour une donnée statique ou tu du moins partagée (champs de servelt par exemple) qui se retrouve mélangée quand deux utilisateurs pile poil au même moment l'utilise. Genre dans une méthode tu utilise un champ de la servlet plutot qu'une donnée locale.

  13. #13
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Bonjour,

    J'ai déjà eu ce genre de problème sur l'une des applications online que je dois maintenir. Cette dernière utilisait un object 'MaskDescriptor' dont le but est d'être utilisé comme un masque de données lorsqu'on envoi des données au serveur (discussion entre l'application et du mainframe).
    Or ce masque était récupéré du contexte de l'application, non de la session par exemple.... erreur bête mais quand on fait pas gaffe.

    Du coup, le comportement suivant était constaté lorsque deux clients effectuaient dans le même millième de seconde une action via l'application: le mask descriptor contenant les données d'un Bean (pourtant cloné et relatif à la session du utilisateur), les données de ce bean étaient remplie / utilisées par deux threads en même temps, mélangeant ainsi les données des clients, et produisant des écrans de données complètement mélangés.

    Donc je pencherai (si les autres propositions ne correspondent pas déjà à ton problème) pour l'utilisation d'un objet commun par ton application, qu'il faudrait idéalement cloner lorsque tu le récupère, de manière à être sur qu'il soit unique pour chaque thread de traitement des actions des utilisateurs. Ou du moins quelque chose qui ressemble à ça.

    C'est ce que mes utilisateurs appellent des "ghosts screens", et ça arrivaient lorsqu'il y avait beaucoup d'activité sur les applications (forcément).

  14. #14
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Désolé pour le retard du feedback,

    Je vous remerci pour vos réponses,

    Pour ce qui est de l'utilisation des variables au niveau des servlets, on a pas trouver de variables globales utilisées,
    par contre en utilisant Velocity (.vm) ca se peut,

    Je vais continuer a vérifier peut être quelque chose nous escape

  15. #15
    Membre confirmé Avatar de kha_yassine
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Bonsoir

    Merci encore pour vos réponses,

    Effectivement on avait des variables globales utilisés donc par les différents utilisateurs (sessions)

    Pour l'instant on a opter pour le Synchronized au niveau des fonctions appelés

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

Discussions similaires

  1. Probleme de sessions avec un hébergeur
    Par totoranky dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 02h36
  2. [Sécurité] Probleme de sessions
    Par perco dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2005, 11h04
  3. [VB.Net] Problème de Session
    Par theartist dans le forum ASP.NET
    Réponses: 7
    Dernier message: 09/09/2004, 16h06
  4. Problème de session sous Konqueror
    Par Escuzze dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 06/07/2004, 11h52
  5. [C#] Probleme de session
    Par alexischmit dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/04/2004, 16h33

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