Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'essaie de coupler une partie de mon site ZF avec Joomla. Le hic est que lorsque mon bootstrap est lu, une session est déjà en cours.
Comment faire pour détruire toutes les sessions en cours ? session_destroy(); ne fonctionne pas, Zend_Session::destroy(); non plus. J'ai toujours ce message d'erreur :
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started
by session.auto-start or session_start()' in C:\wamp\www\virtuemart\www\library\Zend\Session.php:394 Stack
trace: #0 C:\wamp\www\virtuemart\www\library\Zend\Session\Namespace.php(116): Zend_Session::start(true)
#1 C:\wamp\www\virtuemart\www\library\Zend\Auth\Storage\Session.php(85): Zend_Session_Namespace->__construct('Zend_Auth') #2
C:\wamp\www\virtuemart\www\library\Zend\Auth.php(92): Zend_Auth_Storage_Session->__construct() #3
C:\wamp\www\virtuemart\www\library\Zend\Auth.php(134): Zend_Auth->getStorage() #4
C:\wamp\www\virtuemart\www\application\_includes\classes\MyPluginAuth.php(78): Zend_Auth->hasIdentity() #5
C:\wamp\www\virtuemart\www\library\Zend\Controller\Plugin\Broker.php(315):
MyPluginAuth->preDispatch(Object(Zend_Controller_Request_Http)) #6
C:\wamp\www\virtuemart\www\library\Zend\Controller\Front.php(901):
Zend_Controller_Plugin_Broker->preDispatch(Object(Zend_Controller_Request_Http)) #7 C:\wamp\www\virtu in
C:\wamp\www\virtuemart\www\library\Zend\Session.php on line 394[/quote
Une idée ?
Hors ligne
En fait, à aucun moment je fais un Zend_Session::start(); du coup je suis bloqué ! J'ai ce message d'erreur et je ne peux rien faire.
Hors ligne
Ca va m'interresser aussi, car je dois utiliser un CMS avec ZF et donc partager les sessions.
Hors ligne
Je n'ai hélas, toujours pas de solutions. C'est pénible, je ne sais pas comment faire. Je me demande si le problème viens vraiment de la session. Enfin, toutes les idées sont bienvenues : comment cohabiter ZF depuis une autre application ? En fait, ZF ne serait pas le point d'entrée, et le bootstrap sera une page parmi d'autres (mais qui gère une application interne).
PS: quel CMS compte tu utiliser ?
Hors ligne
Droopal
T'as toujours rien ?
J'ai toujours pas essayé, mais ça va pas tarder!
Hors ligne
ce n'est pas du à zend en lui_même il y a déjà eu des chose envoyez au client dans ta page
il ne faut rien envoyer au client avant l'envoie de header
en claire tu ne peux pas zend ou pas zend faire un echo suivit d'un session_start
je ne sais pas ce que tu fais tu ne peux pas exécuter un script quel qu'il soit qui envoyez des données au client puis un autre qui ouvre une session c'est le fonctionnement de HTTP qui l'interdit
le protocole prévois l'envoie de tous les entêtes puis d'une ligne vide suivit du contenu
tu ne peux pas envoyer les entête pout la ligne vide puis du contenu et de nouveau un entête
fermer la session ne sert à rien vu que tu as déjà envoyé des truc au client. tu ne peux pas les reprendre pour insérer tes nouveaux entêtes.
il te faut t'arranger pour ne rien envoyer au client avant l'envoie de tous les entêtes
pas d'echo, pas de print, pas de ?> même suivit de lignes vide il ne doit rien y avoir
A+JYT
Hors ligne
Ok merci, j'ai compris la source du problème. En fait, je compte utiliser Joomla (sebondus: si on arrive à faire une passerelle entre notre cms et zf, il serait bon de nous échanger nos codes), et j'ajoute mon code dans le bootstrap de joomla (son index.php). A vu d'oeil, il n'y a pas d'echo mais je vais bien éplucher leur code. Merci encore Sekaijin, tu me fais gagner un temps fou.
Hors ligne
Salut whitespirit,
t'es arrivé au bout de ton problème ? Je viens d'avoir plus ou moins un problème similaire. La version 1.6 du ZF permet de plus ou moins contourner le problème de la façon la plus crados qui soit (avec un truc pas documenté, j'espère que ça ne va pas sauter dans une version ultérieure...).
J'ai initialisé ma session dans mon bootstrap avec le code suivant : (attention uniquement à partir du ZF 1.6)
if (!defined("SID")) { session_start(); } Zend_Session::$_unitTestEnabled = true; Zend_Session::start(); $session = new Zend_Session_Namespace('myNamespace');
Je n'ai pas creusé à fond pour voir si ça avait des effets de bords terribles, mais pour l'instant, mes 3 applis qui partagent la même session ont l'air de tourner... (2 applis ZF et une appli tierce dans le même nom de domaine...)
Quand on fouille un peu, Zend_Session est vraiment codé à l'envers... j'espère qu'ils ont prévu un peu de ménage dans la version 2.0 du ZF, au moins pour dégager toutes ces variables statiques et mettre un singleton derrière...
A+, Philippe
Hors ligne
Bonjour Phillipe,
Désolé pour le retard mais ces temps-ci mon big-boss me fait bosser sur d'autre développement et à mon grand regret je n'ai pas développé sous Zend depuis Aout !!! (Scandaleux) ! Je n'avais toujours pas trouvé de solution (d'ailleurs je n'ai pas eu le temps d'en chercher une), mais je testerai ton code très prochainement.
A bientôt.
Hors ligne
Pour flusher les sessions il faut utiliser session_write_close().
La doc est claire par contre : si vous utilisez Zend_Session : n'utilisez *pas* les fonctions de session de PHP, car ZF gère lui même toute la session, et vous risquez de le troubler et générer des exceptions.
Je rappelle aussi que la session démarre si :
- on appelle Zend_Session::start()
- la variable php.ini session.auto_start est à On (absolument déconseillé)
- on instancie son premier namespace de session alors que l'option strict des sessions est à off (par défaut), ça on l'oublie souvent ^^
Hors ligne
Oui, mais il y a des cas concrets où on doit faire discuter des applis ensemble. Partager des infos de session peut faire gagner un temps précieux pour l'intégration de ces applis ensemble (sachant que bien sur elles ne sont pas toutes codées avec le ZF...). Quand on a 2h pour mettre en place le système sur des applis réelles et complexes, on ne cherche pas à développer une routine à base de token ou à installer un SSO...
Certes c'est une entorse à la théorie, mais parfois on n'a pas trop le choix, tant pis si ça "trouble" le ZF
A+, Philippe
Hors ligne