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

  1. #1
    Membre à l'essai
    Inscrit en
    février 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 35
    Points : 20
    Points
    20

    Par défaut [zend 1.11] session php variable et déconnexion

    Bonjour a tous, n'ayant pas pu utiliser directement les sessions de zend j'ai opté pour session php.
    lors de l'authentification je lance une session comme suit;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //au début de la page
    <?php session_start();?>
    //apres vérification des identifiants
     $_SESSION = array();
                                 session_destroy();
                                 session_start();	          	
        	          $_SESSION['login']= $ident;
        	          $_SESSION['mot_de_passe']= $pw;
    //redirection vers la page recherche.phtml
     $this->_helper->redirector('recherche', 'index', null,  array());
        		      exit();
    j'arrive a récupérer le login dans la page recherche, je récupère le login, mais dès que j'actualise la page je le perd.
    J'ai aussi un problème de déconnexion, la session reste toujours active, donc l'accès a la page recherche.phtml n'est pas sécurisé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     <a class="signout" 
      href="<?php echo $this->url(
            array(
                'controller' => 'index',
                'action'     => 'index'
            ),
            'default',
            true) ?>" onClick=" '<?php /*Zend_Session::destroy(true); */session_unset();
            ;session_destroy();
              ?>';alert('Vous êtes bien déconnecté');">
           D&eacute;connexion </a> </p></div>

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 528
    Points : 926
    Points
    926

    Par défaut

    bonjour,

    Il te faut initialiser la session plus tôt , au démarrage de l'application(dans le boostrap) par exemple, afin qu'elle soit partagée entre tous les composants(controller, action,vue...). Et c'est avec Zend_Session_Namespace qu'il faut créer une session. Et pour rendre visible une variable de session tu peux utiliser Zend_Registry (une sorte de variable globale):

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //dans le bootstrap
    Zend_Registry::set('sess', new Zend_Session_Namespace('MyNamespace'));
     
    //puis dans l'action, on met les variables en session comme suit:
     Zend_Registry::get('sess')->login=$ident;
     Zend_Registry::get('sess')->motDePasse=$pw;//!!!on ne stocke pas un mot de passe en session

    dans n'importe quelle action ou dans n'importe quelle vue, tu peux afficher la variable de session:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo Zend_Registry::get('sess')->login;

    Enfin pour détruire la session il suffit d'initialiser la variable de session à null

  3. #3
    Membre à l'essai
    Inscrit en
    février 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 35
    Points : 20
    Points
    20

    Par défaut

    j'ai fait ce que tu viens de me recommander,
    j'ai créé la fonction suivante dans le bootstrap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {  protected function _initSession(){        
      // Global session          
    	Zend_Registry::set('sess', new Zend_Session_Namespace('MyNamespace'));
    }
     
    }
    le problème demeure le même je récupère le login lors de la première connexion a la vue recherche.phtml, mais dèsque j'actualise la page je le perd.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 528
    Points : 926
    Points
    926

    Par défaut

    je pense que la session ne démarre pas il faut la redemarrer explicitement avec Zend_Session::start() dans le bootstrap:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     protected function _initSession(){        
      // Global session          
          Zend_Session::start();
    	Zend_Registry::set('sess', new Zend_Session_Namespace('MyNamespace'));
    }
    zend_namespace

  5. #5
    Membre à l'essai
    Inscrit en
    février 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 35
    Points : 20
    Points
    20

    Par défaut

    C'est toujours pareil.
    la session se perd dès actualisation.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 528
    Points : 926
    Points
    926

    Par défaut

    tu peux poster le code correspondant à l'action d'authentification pour voir comment stockes-tu les variables en session?

    je pense que tu n'as pas de session_start() quelque part dans tes actions sinon vire le.

  7. #7
    Membre à l'essai
    Inscrit en
    février 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 35
    Points : 20
    Points
    20

    Par défaut

    Action index
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     public function indexAction()
     
        {    
        	$request = $this->getRequest();
        	$form = new Application_Form_Identify();
        	$post = $request->getPost(); // This contains the POST params
     
        	/**
        	 * Check if form was sent
        	*/
        	if ($request->isPost()) {
        		/**
        		 * Check if form is valid
        		 */
     
        		$ident =  trim($post['identifiant']) ;    	
        		$mot_de_passe =  trim($post['mot_de_passe']);
        	    $userid =	new Application_Model_DbTable_Utilisateurs();
     
        	    if ($ident && $mot_de_passe){  
        	    	$pw = md5($mot_de_passe);
        	    	$resultat = $userid->select()
        	    	         -> where('id  = ?', $ident)
        	    	         -> where('pw1= ?', $pw);
        	    	//echo $resultat;
        	    	$rows = count($userid->fetchRow($resultat));
        	    	//echo $rows;
     
        	        if ($rows == 1){
                           Zend_Registry::get('sess')->login=$ident;
        	        Zend_Registry::get('sess')->motDePasse=$pw;
                           $this->_helper->redirector('recherche', 'index', null,  array());
        		      exit();
     
        		}else $this->view->erreur = "L'identifiant ou le mot de passe est incorrecte";
     
        	}else $this->view->erreur = "Veuillez remplir les deux champs";	
     
          	}
     
        	$this->view->form = $form;
        	//$this->view->msg = $this->session->nom;
     
     
        }

  8. #8
    Membre à l'essai
    Inscrit en
    février 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 35
    Points : 20
    Points
    20

    Par défaut

    C'est bon j'ai trouvé la solution c est bête mais c'est comme ça.
    en fait c'est l'evenement Onclick de la vue qui détruit la session ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <a class="signout" 
      href="<?php echo $this->url(
            array(
                'controller' => 'index',
                'action'     => 'index'
            ),
            'default',
            true) ?>" onClick=" '<?php Zend_Session::destroy(true) ?>';alert('Vous êtes bien déconnecté');">
           D&eacute;connexion </a> </p>
    Il y a t-il moyen de faire le sign out sur la même page au lieu d'appeler une autre.

  9. #9
    Membre à l'essai
    Inscrit en
    février 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 35
    Points : 20
    Points
    20

    Par défaut

    merci beaucoup @armel18

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 528
    Points : 926
    Points
    926

    Par défaut

    pour se deconnecter tu fais appelles à Zend_Session::destroy() dans une action:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     public function logoutAction(){
     Zend_Session::destroy();
    }

    l'action logout n'a pas besoin de vue.tu peux appeler logout dans n'importe quelle vue:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <a class="signout" 
      href="<?php echo $this->url(
            array(
                'controller' => 'index',
                'action'     => 'logout'
            ),
            'default',
            true) ?>" > signout</a>

  11. #11
    Membre à l'essai
    Inscrit en
    février 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 35
    Points : 20
    Points
    20

    Par défaut

    Thank's

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

Discussions similaires

  1. Session php variable
    Par Greggggggg dans le forum Sessions
    Réponses: 5
    Dernier message: 30/08/2006, 09h00
  2. Réponses: 8
    Dernier message: 13/07/2006, 10h04
  3. Réponses: 1
    Dernier message: 07/07/2006, 14h56
  4. ZoneAlarm bloque mes variables de session PHP en local
    Par GritNatz dans le forum Sécurité
    Réponses: 3
    Dernier message: 24/06/2006, 14h20
  5. Deboggeur de variables de sessions PHP
    Par joe_le_mort dans le forum Sessions
    Réponses: 10
    Dernier message: 14/11/2005, 23h22

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