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

Autres composants PHP Discussion :

Problème avec zend_session


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut Problème avec zend_session
    Bonjour,

    dans mon bootstrap, j'initialise une session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $session = new Zend_Session_Namespace('Default');
    dans une Action, j'initialise une valeur
    je n'arrive pas à récupérer cette valeur dans une autre action

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Zend_Debug::dump($session->id);//donne null
     
    Zend_Debug::dump($_SESSION['Default']['id'])//donne la réponse;
    par contre si je réinstancie la session cela fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $session = new Zend_Session_Namespace('Default');
    Zend_Debug::dump($session->id);//donne la réponse
    Est-ce que je dois à chaque fois instancié zend_session?

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    qu'est-ce que tu obtiens quand tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Debug::dump($session);
    Dans l'action dans laquelle tu n'arrives pas à récupérer la valeur ?

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    sans instancié de nouveau, j'obtient null

    en instanciant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    object(Zend_Session_Namespace)#35 (1) {
      ["_namespace:protected"] => string(7) "Default"
    }

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Et comment as tu récupéré ton $session dans ton action (alors qu'il est initialiés dans le bootstrap) ?
    Est-ce qu'il est passé par le registre ?

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Et comment as tu récupéré ton $session dans ton action (alors qu'il est initialiés dans le bootstrap) ?
    Est-ce qu'il est passé par le registre ?
    Non, je pensais juste que comme il étais dans le bootstrap, im étais initialise à chaque appel d'Action.

    pour la classe statique, je trouve que cela commence à faire beaucoup de code, juste pour moi avoir un $_SESSION['id'].

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Non, je pensais juste que comme il étais dans le bootstrap, im étais initialise à chaque appel d'Action.

    pour la classe statique, je trouve que cela commence à faire beaucoup de code, juste pour moi avoir un $_SESSION['id'].
    Une variable initialisée dans le bootstrap n'est pas disponible dans les classes. Ca a l'air d'être un problème de portée des variables dans ton cas...

    Ce que tu dois pouvoir faire, c'est stocker ta session dans le registre pour pouvoir le récupérer ensuite dans les actions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // dans le bootstrap
    $session = new Zend_Session_Namespace('Default');
    Zend_Registry::set('session', $session);
     
    // dans les actions
    $session = Zend_Registry::get('session');
    Zend_Debug::dump($session->id);
    Mais je ne comprend même pas comment tu as réussi à initialiser la valeur 'id' dans une action sans récupérer la variable

  7. #7
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Est-ce que je dois à chaque fois instancié zend_session?
    Tout à fait !

    Mais tu peux créer un objet qui retourne cela par une méthode statique. L'idée est de créer ensuite d'autres fonctions statiques qui stocke cela.

    Si dessous un exemple de code. Il s'agit d'un jeu en ligne. L'objet Sauvegarde stocke les données de la partie (composant ESD_Partie) en session. Pour l'instant le jeu, en bêta, ne permet pas de stockage en BDD, mais ce n'est pas l'objet du débat.
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
     
    /**
     * ESD_Sauvegarde
     *
     * chargement de la sauvegarde
     *
     * @version $Id$
     * @license BSD
     * @copyright Alexandre TRANCHANT 2008
     */
     
    /**
     * ESD_Sauvegarde
     *
     */
    class ESD_Sauvegarde{
        const CLEF_SESSION  = 'ESD_Partie';
     
        /**
         * Retourne la partie sauvegardée
         * @access public
         * @return ESD_Partie
         */
        public static function charger(){
            $namespace = new Zend_Session_Namespace(ESD_Sauvegarde::CLEF_SESSION);
            if (!self::isValide($namespace->partie)){
                $namespace->partie = self::creer();                
            }
            return $namespace->partie;
        }
        /**
         * Sauvegarde la partie
         *
         * @param ESD_Partie $sauvegarde
         */
        public static function sauvegarder(ESD_Partie $sauvegarde){
            $namespace = new Zend_Session_Namespace(ESD_Sauvegarde::CLEF_SESSION);
            $namespace->partie=$sauvegarde;
        }
        /**
         * Crée une nouvelle partie
         *
         * @return ESD_Partie
         */
        public static function creer(){
            $partie = new ESD_Partie();
            self::sauvegarder($partie);
            return $partie;        
        }
        /**
         * Indique si l'objet passé en paramètre est une partie valide
         *
         * @todo gérer les versions en cours
         * @param unknown_type $object
         * @return boolean
         */
        public static function isValide($object=null){
            return $object instanceof ESD_Partie;        
        }
    }
    ?>
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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