1

Je vous écris pour voir si quelqu'un d'entre vous a déjà rencontré ce problème et a une chance de comprendre pourquoi cela m'est arrivé.Comportement Zend_Session étrange en utilisant Zend_Application

C'est l'histoire.

J'ai développé de nombreuses applications ZF avant Zend Framework v. 1.8, puis j'ai arrêté pendant environ 18 mois. Maintenant, je devais commencer un nouveau projet sur lequel j'ai décidé d'utiliser à nouveau Zend Framework.

Sur mon serveur local, j'avais la version 1.11.3 installée, donc je n'ai pas téléchargé la dernière version.

Avant l'utilisation de Zend_Application avec le fichier Bootstrap.php j'ai utilisé pour lancer des sessions de mettre mes options de session dans mon fichier config.ini puis de les charger dans une instance Zend_Session comme ceci:

config.ini

sessions.name = NAME 
sessions.use_only_cookies = 1 
sessions.save_path = APPLICATION_PATH "/../tmp/sessions" 
sessions.strict = on 
sessions.remember_me_seconds = 1800 

index.php (dans le répertoire du serveur web public) avant de commencer l'application:

Globals::startSession(); 

classe Globals avec divers épreuves de séparation personnalisées meth utiles SACO:

class Globals 
    { 
      static public function startSession() 
      { 
      $sessions_conf = self::getConfig()->sessions; 
      Zend_Session::setOptions($sessions_conf->toArray();); 
      Zend_Session::start(); 
      } 
    } 

Cela a toujours très bien, ce qui permet mes sessions (utilisés avec Zend_Session_Namespace) et le stockage des fichiers de session dans le save_path.

Avec Zend_Application le manuel dit de simplement stocker les options de session dans le fichier application.ini sous la rubrique « ressources » et Zend_Session sera automatiquement configuré ...

Je l'ai fait comme ceci:

; SESSIONS 
resources.session.name = NAME 
resources.session.use_only_cookies = 1 
resources.session.save_path = APPLICATION_PATH "/../tmp/sessions" 
resources.session.strict = on 
resources.session.remember_me_seconds = 1800 

Cela n'a pas fonctionné. J'ai donc essayé d'utiliser (pas en même temps!) Les méthodes _initSession() et _initForceSession() dans le fichier Bootstrap.php, en les mettant au début de la classe et l'écriture dans leur code:

$this->bootstrap('session'); 

Mais la session ne fonctionnait jamais, les données n'étaient pas stockées entre les requêtes http et les fichiers de session n'étaient jamais écrits dans le save_path ...

Pourriez-vous, s'il vous plaît, faites-moi savoir si c'est un comportement normal (peut-être que j'ai manqué quelque chose quelque part ...)?

De toute évidence, j'ai résolu le problème de ré-implémenter mon ancienne méthode (et cela fonctionne parfaitement), mais je voudrais apprendre à l'utiliser correctement.

Merci d'avance.

+0

pouvez-vous poster le code pour votre _initSession() et _initForceSession() (si différent)? –

+0

Non, le code est le même, il n'y a qu'un appel à Zend_Session :: start(); – Alessandro

Répondre

0

Dans votre Bootstrap.php ajouter

public function _initSession() 
{ 
Zend_Session::start(); 
} 

options de session peuvent être définies dans application.ini

+0

J'ai utilisé _initSession() comme vous me l'avez suggéré, mais sans résultat, je pense qu'il manque quelque chose, peut-être que l'utilisateur RockyFord a raison avec ses suggestions, j'essaierai demain de les implémenter. – Alessandro

+0

Cette solution me donne le même résultat que celle de RockyFord, aucun fichier de session n'est stocké dans le save_path spécifié ... – Alessandro

1

Cela devrait être un cas de chavirement sur et il fonctionne, aurait pu rendre à facile.

Je pense que vous pouvez avoir un problème avec la façon dont vous définissez vos options dans votre application.ini:

; SESSIONS 
resources.session.name = NAME 
resources.session.name.use_only_cookies = 1 
resources.session.name.save_path = APPLICATION_PATH "/../tmp/sessions" 
resources.session.name.strict = on 
resources.session.name.remember_me_seconds = 1800 

selon la reference manual

Pour définir une option de configuration de session, inclure le nom de base (la partie du nom après "session".) comme clé d'un tableau passé à Zend_Session :: setOptions().

avec vos options définies correctement le bootstrap _initSession() devrait juste fonctionner.

public function _initSession() 
{ 
Zend_Session::start(); 
} 

P.S. J'utilise Zend_Session_Namespace tout le temps mais je fais rarement affaire avec une session globale.

+0

Merci pour vos astuces, je vais essayer demain et vous dire si je serai capable de le faire fonctionner correctement. – Alessandro

+0

Rien à faire, j'ai essayé d'utiliser un nom de base après la session. part dans mon application.ini et définissez la fonction _initSession() dans mon Bootstrap.php, mais, comme avant, aucun fichier de session n'est stocké dans le save_path ... Je ne peux vraiment pas comprendre pourquoi. – Alessandro

+0

J'ai fait un test maintenant en utilisant var_dump (Zend_Session :: getOptions()); dans mon _initSession() dans le fichier Bootstrap.php et il semble qu'aucune de mes options ini n'a été définie ... – Alessandro

Questions connexes