Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 31-03-2008 14:32:31

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Comment utiliser ZF si une session existe déjà ?

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

 

#2 31-03-2008 20:51:26

Geoffrey
Membre
Lieu: 63
Date d'inscription: 12-04-2007
Messages: 140
Site web

Re: Comment utiliser ZF si une session existe déjà ?

Bonjour,

Peut-être avec un :

Code:

if (empty(SID))

Geoffrey

Hors ligne

 

#3 01-04-2008 06:37:40

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Comment utiliser ZF si une session existe déjà ?

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

 

#4 03-04-2008 11:17:35

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment utiliser ZF si une session existe déjà ?

Ca va m'interresser aussi, car je dois utiliser un CMS avec ZF et donc partager les sessions.

Hors ligne

 

#5 03-04-2008 12:54:34

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Comment utiliser ZF si une session existe déjà ?

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

 

#6 08-04-2008 13:15:24

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment utiliser ZF si une session existe déjà ?

Droopal
T'as toujours rien ?
J'ai toujours pas essayé, mais ça va pas tarder!

Hors ligne

 

#7 09-04-2008 07:47:31

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Comment utiliser ZF si une session existe déjà ?

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

 

#8 09-04-2008 08:43:44

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Comment utiliser ZF si une session existe déjà ?

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

 

#9 19-09-2008 18:01:38

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Comment utiliser ZF si une session existe déjà ?

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)

Code:

    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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#10 24-09-2008 06:39:02

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Comment utiliser ZF si une session existe déjà ?

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

 

#11 24-09-2008 17:58:38

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: Comment utiliser ZF si une session existe déjà ?

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

 

#12 25-09-2008 10:17:47

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Comment utiliser ZF si une session existe déjà ?

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 smile

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages