Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de gestion des sessions

Utilisation des sessions

    22 juin 2017 à 9:24:32

    Bonjour à tous.

    j'ai problème d'utilisation des sessions avec jsf richfaces.

    Je récupère le contenu de ma session de la façon suivante ex. Personne p=(Personne)Authentification.session.getAttribute("personne",sessionuser);

    Puis je récupère l'id de le personne en faisant int id=p.getId();

    J'arrive bel et bien à récupérer le contenu de ma session,mais le problème intervient quand deux ou plusieurs utilisateurs sont connectés en même temps à mon application.

    Le contenu de ma session est chaque fois modifié et tous les utilisateurs connectés ont comme id l'id de l'utilisateur qui s'est connecté en dernier lieu.

    je voulais vraiment votre aide pour résoudre ce problème.

    voici ma fonction de connexion dans laquelle j'ai utilise la session:

    public String AuthentifierUser(){
               
                if((this.login.trim().equalsIgnoreCase("")||this.login==null)&&(this.password.trim().equalsIgnoreCase("")||this.password==null)){
                    this.msg="Vous devez vous authentifier";
                    return null;
                }
                if(this.login.trim().equalsIgnoreCase("")||this.login==null){
                    this.msg="vous devez saisir votre nom d'utilisateur";
                    return null;
                }
                if(this.password.trim().equalsIgnoreCase("")||this.password==null){
                    this.msg="Vous devez saisir le mot de passe";
                    return null;
                }
               
                Personnel p=null;
                String log=this.login,pass=this.password;
                session=Authentification.getSessionUser();
                ResultSet result=null;
                String req="select * from personnel";
              result=useBD.ConnectionBD.InterrogerBD(req);
                if(result!=null){
                    try {
                        while(result.next()){
                            p=new Personnel();
                            p.setNom(result.getString("nom"));
                            p.setPrenom(result.getString("prenom"));
                            p.setLogin(result.getString("login"));
                            p.setPassword(result.getString("password"));
                            p.setFonction(result.getString("fonction"));
                            p.setIdpersonnel(result.getInt("id_pers"));
                            if(p.getLogin().equalsIgnoreCase(log)&&p.getPassword().equalsIgnoreCase(pass)){
                                session.setAttribute("user", p);
                                break;
                                }
                           
                        }
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if(p.getLogin().equalsIgnoreCase(log)&&p.getPassword().equalsIgnoreCase(pass)){
                       
                        if(p.getFonction().equalsIgnoreCase("GESTIONNAIRE"))
                            return "gestion";
                        if(p.getFonction().equalsIgnoreCase("VENDEUR"))
                            return "vente";
                        if(p.getFonction().equalsIgnoreCase("CAISSIER"))
                            return "caisse";
                    }
                    else{
                   
                    this.msg="Vous n'etes pas reconnus par notre Base de donnees";
                   
                    }
                }
               
               
                   
                return null;
            }

    public static HttpSession getSessionUser(){
                FacesContext cont=FacesContext.getCurrentInstance();
                return (HttpSession)cont.getExternalContext().getSession(true);
               
            }

    Et l'utilisation de cette session je l'ai fait fait dans la fonction validervente suivante:

    public void validervente(){
        this.msg="";
        if(Authentification.session==null){
            this.msg="Vous devez commencer par vous authentifier";
            return;
        }
        if(listecommandeclient.isEmpty()){
            this.msg="Vous n'avez pas de commande a valider dans le tablau";
            return;
        }
        Personnel p=(Personnel)Authentification.session.getValue("user");
        int idpersonnel=p.getIdpersonnel();
        String req="insert into vente(id_commande,id_pers,datevente) value";
        for(int i=0;i<listecommandeclient.size();i++){
            if(i<listecommandeclient.size()-1)
            req+="("+listecommandeclient.get(i).getIdcommande()+","+idpersonnel+",now()),";
            else
                req+="("+listecommandeclient.get(i).getIdcommande()+","+idpersonnel+",now())";   
        }
       
        if(useBD.ConnectionBD.ModifierBD(req)>0){
            this.msg="L'insertion s'est effectuee avec succes";
            this.listecommandeclient.clear();
            this.idclient=-1;
            this.montant=0;
            return;
        }
        this.msg="L'insertion ne s'est pas effectuee";
    }

    -
    Edité par pagaokatamba 22 juin 2017 à 9:45:03

    • Partager sur Facebook
    • Partager sur Twitter
    PATRICK WITANENE KATAMBA Pagao
      22 juin 2017 à 15:19:33

      Tu a deux solution en JSF (bon ok en vrais il y en a plus):

      - Utiliser le système d'authentification par serveur (j_security_check)

      - Utiliser un ManagedBean de type Session

      Il est déconseillé de jouer avec les contexte  externe.

      • Partager sur Facebook
      • Partager sur Twitter
        29 juin 2017 à 16:17:05

        Merci beaucoup Florent.

        Pouvez-vous me faire une petite documentation sur les deux solutions?

        Parce que si vous avez bien vu mon code j'ai utilisé les sessions pour tenter de résoudre ce problème mais en vain

        Voici la façon que j'ai procédé avec les sessions

         //Méthode de création de session:

        public static HttpSession getSessionUser(){
                    FacesContext cont=FacesContext.getCurrentInstance();
                    return (HttpSession)cont.getExternalContext().getSession(true);

                }

        // création de la session session et Mise en session de l'utilisateur aprèsconnexion:

        Personnel p=null;
                    String log=this.login,pass=this.password;
                    session=Authentification.getSessionUser();
                    ResultSet result=null;
                    String req="select * from personnel";
                  result=useBD.ConnectionBD.InterrogerBD(req);
                    if(result!=null){
                        try {
                            while(result.next()){
                                p=new Personnel();
                                p.setNom(result.getString("nom"));
                                p.setPrenom(result.getString("prenom"));
                                p.setLogin(result.getString("login"));
                                p.setPassword(result.getString("password"));
                                p.setFonction(result.getString("fonction"));
                                p.setIdpersonnel(result.getInt("id_pers"));
                                if(p.getLogin().equalsIgnoreCase(log)&&p.getPassword().equalsIgnoreCase(pass)){
        session.setAttribute("user", p);
                                    break;
                                    }

                            }
                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }


        //Utilisation de la variable(l'utilisateur) passée en session:

        Personnel p=(Personnel)Authentification.session.getValue("user");
            int idpersonnel=p.getIdpersonnel();
            String req="insert into vente(id_commande,id_pers,datevente) value";
            for(int i=0;i<listecommandeclient.size();i++){
                if(i<listecommandeclient.size()-1)
                req+="("+listecommandeclient.get(i).getIdcommande()+","+idpersonnel+",now()),";
                else
                    req+="("+listecommandeclient.get(i).getIdcommande()+","+idpersonnel+",now())";    
            }


        Je ne s'est pas si j'ai été aussi clair que vous l'aurez voulu.

        Merci d'avance


        • Partager sur Facebook
        • Partager sur Twitter
        PATRICK WITANENE KATAMBA Pagao
          30 juin 2017 à 9:41:49

          Montre ta classe Authentification et utilise les balise code (le bouton "</>").

          Sinon pour le système j_security_check, cela dépend du serveur d'application utilisé.

          Pour la deuxième solution:

          http://www.objis.com/formation-java/tutoriel-jsf-2-managed-bean-expression-el-jsf.html

          @ManagedBeand(name=SessionContext.MANAGED_SCOPED_NAME)
          @SessionScoped
          public class SessionContext
          {
          
          	public static final String MANAGED_SCOPED_NAME = "sessionContext";
          	
          	private Personnel user;
          	
          	
          	// get/set
          	
          	
          
          
          }
          
          
          
          
          
          public MaClasseAppellante{
          
          
          	public void maFonction()
          	{
          
          		SessionContext session = (SessionContext)getManagedBean(SessionContext.MANAGED_SCOPED_NAME);
          		
          		//Ton code
          
          	}
          	
          	public static Object getManagedBean(final String beanName) {
          		FacesContext fc = FacesContext.getCurrentInstance();
          		Object bean;
          
          		try {
          			ELContext elContext = fc.getELContext();
          			bean = elContext.getELResolver().getValue(elContext, null, beanName);
          		} catch (RuntimeException e) {
          			throw new FacesException(e.getMessage(), e);
          		}
          
          		if (bean == null) {
          			throw new FacesException("Managed bean with name '" + beanName
          					+ "' was not found. Check your faces-config.xml or @ManagedBean annotation.");
          		}
          
          		return bean;
          	}
          
          
          }
          
          

          Avec cette méthode tu utilise le cycle de vie de JSF.

          • Partager sur Facebook
          • Partager sur Twitter
            13 juillet 2017 à 7:45:09

            Merci beaucoup Florent.

            Je m'excuse d'abord du retard du au fait que j'étais à l'intérieur du pays où il n'y a pas de connexion internet.

            Je vais essayer le code et je vous ferez signe de ce que j'aurai eu comme résultat.

            Merci encore une fois

            • Partager sur Facebook
            • Partager sur Twitter
            PATRICK WITANENE KATAMBA Pagao
              29 octobre 2017 à 12:22:14

              Bonjour Florent.

              Ca fait longtemps  que je ne me connectes pas, c'est la seule raison qui fait que je ne vous avez pas encore remercier de votre aide.

              En fait j'ai pu resoudre les problèmes des sessions dans mon application.

              Le seul problème etait que je declarais mes variables des sessions static.

              Juste quand j'ai modifie tout a marche.

              • Partager sur Facebook
              • Partager sur Twitter
              PATRICK WITANENE KATAMBA Pagao

              Probleme de gestion des sessions

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown