Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-05-2008 10:57:37

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

[Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

Hello,

Version du Framework 1.5.2 (testé aussi avec la version 1.5.0 et avec le dernier Snapshot)

j'obtiens les erreurs suivantes:

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'You must explicitly start the session with Zend_Session::start() when session options are set to strict.' in /home/webdev/webstage/devintra/framework/library/Zend/Session.php:355 Stack trace: #0 /home/webdev/webstage/devintra/framework/library/Zend/Session/Namespace.php(116): Zend_Session::start(true) #1 /home/webdev/webstage/devintra/framework/library/Zend/Auth/Storage/Session.php(85): Zend_Session_Namespace->__construct('Zend_Auth') #2 /home/webdev/webstage/devintra/framework/library/Zend/Auth.php(92): Zend_Auth_Storage_Session->__construct() #3 /home/webdev/webstage/devintra/framework/library/Zend/Auth.php(134): Zend_Auth->getStorage() #4 /home/webdev/webstage/devintra/ssl/zfweb/prepend.php(70): Zend_Auth->hasIdentity() #5 {main} thrown in /home/webdev/webstage/devintra/framework/library/Zend/Session.php on line 355

lorsque je ne démarre pas la session Zend_Session::start(<avec les options ci-dessous>);

et qu'ensuite je fais un

Code:

$authInstance = Zend_Auth::getInstance();
if ($authInstance->hasIdentity()===true){
   // -> j'obtiens l'exception dans $authInstance->hasIdentity()
}
[...]

Donc je vois bien que la session n'est pas démarrée.

les options de mes sessions sont stockées dans un fichier xml et sont les suivantes:

Code:

<name>SESSIONNAME</name>
<save_path>/tmp/sessionpath/</save_path>
<save_handler>files</save_handler>
<hash_bits_per_character>5</hash_bits_per_character>
<hash_function>0</hash_function>

Quand en revanche je démarre ma session

Code:

if (! Zend_Session::isStarted ()) {
    $sessionConfig = new Zend_Config_Xml ( rtrim ( $appConfig->paths->configs, '/\\' ) . '/session.xml', $bridge->getHostEnvironment() );
    Zend_Session::start ( $sessionConfig->toArray () );
}
[...]
$authInstance = Zend_Auth::getInstance();
if ($authInstance->hasIdentity()===true){
// -> j'obtiens l'exception dans $authInstance->hasIdentity()
}

j'obtiens l'exception suivante :

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'The session was explicitly destroyed during this request, attempting to re-start is not allowed.' in /home/webdev/webstage/devintra/frameworkSnapshot/library/Zend/Session.php:364 Stack trace: #0 /home/webdev/webstage/devintra/frameworkSnapshot/library/Zend/Session/Namespace.php(116): Zend_Session::start(true) #1 /home/webdev/webstage/devintra/frameworkSnapshot/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace->__construct('Zend_Auth') #2 /home/webdev/webstage/devintra/frameworkSnapshot/library/Zend/Auth.php(91): Zend_Auth_Storage_Session->__construct() #3 /home/webdev/webstage/devintra/frameworkSnapshot/library/Zend/Auth.php(133): Zend_Auth->getStorage() #4 /home/webdev/webstage/devintra/ssl/zfweb/prepend.php(70): Zend_Auth->hasIdentity() #5 {main} thrown in /home/webdev/webstage/devintra/frameworkSnapshot/library/Zend/Session.php on line 364

Donc j'ai cherché un peu et dans les version >1.5.0 la fonction start de Zend/Session.php contient

Code:

if (self::$_sessionStarted && self::$_destroyed) {
            require_once 'Zend/Session/Exception.php';
            throw new Zend_Session_Exception('The session was explicitly destroyed during this request, attempting to re-start is not allowed.');
}
if (self::$_sessionStarted) {
            return; // already started
}

alors que dans la version 1.0.3:

Code:

if (self::$_sessionStarted) {
            return; // already started
}

Donc ma question est: comment faire pour démarrer mes sessions sans impacter les authentifications? (ou inversement?)

Merci pour vos réponses !

PsY

Dernière modification par PsY (22-05-2008 12:14:19)


PEBKAC !

Hors ligne

 

#2 21-05-2008 12:11:39

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

Bnojur,

as-tu essayer de démarrer ta session avec les parametres par defaut dans un premier temps ?
et de la tester (placer une valeur et la recuperer dans la page d'apres).
meme chose avec tes options

je pense qu'il y a un pb dans tes session (options, droits sur ton repertoire save_path, ....) et que ca n'est pas lié à zend_Auth.

Hors ligne

 

#3 21-05-2008 12:29:37

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

merci pour ta réponse ichevc02.

Je viens de tester avec simplement

Code:

if (! Zend_Session::isStarted ()) {
    Zend_Session::start ( );
}
$authInstance = Zend_Auth::getInstance();
if ($authInstance->hasIdentity()===true) {
   //stuff
}

mais j'ai la même réponse.
'The session was explicitly destroyed during this request, attempting to re-start is not allowed.'

Le problème est que ça fonctionne bien avec la version 1.0.3 du framework.

Pire encore: j'ai ajouté un simple die('destroyed'); en première ligne dans la fonction destroy de Zend/Session.php, et rien ne s'affiche, donc il ne passe même pas dans cette fonction et du coup, ne set même pas self::$_destroyed à true.

Du coup comment fait-il pour passer dans l'exception !?

Code:

if (self::$_sessionStarted && self::$_destroyed) {
            require_once 'Zend/Session/Exception.php';
            throw new Zend_Session_Exception('The session was explicitly destroyed during this request, attempting to re-start is not allowed.');
}

N'y a-t-il pas un souci dans les paramètres du serveur.....? j'avoue que je cale là.

merci de vos réponses


PEBKAC !

Hors ligne

 

#4 21-05-2008 12:55:01

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

j'ai testé aussi le changement de répertoire entre la version 1.0.3 QUI MARCHE et la version 1.5.2.:

Code:

if ($_SERVER['REMOTE_ADDR']== '<mon_ip>') {
        //test the development framework snapshot
        define ('ZEND_FRAMEWORK_DIR','/<path adéquat>/frameworkSnapshot/library'); 
    }else {
        // dev PATH TO ZEND FRAMEWORK (version 1.5.2 dernier snapshot en cours)
        define ('ZEND_FRAMEWORK_DIR','/<path adéquat>/framework/library'); 
    }

avec la version 1.0.3 ça fonctionne sans soucis, mais pas avec la 1.5.2...

quelqu'un a des idées?


PEBKAC !

Hors ligne

 

#5 21-05-2008 14:16:49

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

La je vois pas trop.

Tout ce que je peux te dire c'est que je viens aussi de passer en 1.5.2 et que je n'ai pas de soucis de ce coté.

essaie de faire un try catch autour du Zend_SEssion start pour voir si l'exception est bien jetée à ce moment ou si la session a été demarée avant ...

demarre ta session dans ton bootstrap

dans le bootstrap :

Code:

   try{
    Zend_Session::start ( );
}catch(Exception $e){
   var_dump("echec du session start".$e->getMessage());
  ob_flush();
  die();
}

ailleurs action ou autre

Code:

$authInstance = Zend_Auth::getInstance();
if ($authInstance->hasIdentity()===true) {
   //stuff
}

Dernière modification par ichevc02 (21-05-2008 14:23:34)

Hors ligne

 

#6 21-05-2008 14:28:08

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

hum,

je viens d'essayer mais sans succès: même message.

l'exception est levée lorsque je fais le $authInstance->hasIdentity() :

Code:

try{
        $d = $authInstance->hasIdentity();
    }catch(Exception $e){
        var_dump("echec du session start : ".$e->getMessage());
        ob_flush();
        die();
    }

j'obtiens
string(121) "echec du session start : The session was explicitly destroyed during this request, attempting to re-start is not allowed."

Dernière modification par PsY (21-05-2008 14:29:12)


PEBKAC !

Hors ligne

 

#7 21-05-2008 14:34:12

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

j'ai l'impression que c'est lorsque Zend_Auth appelle getStorage() et donc crée une nouvelle instance du namespace via $this->setStorage(new Zend_Auth_Storage_Session());

Code:

$this->_session   = new Zend_Session_Namespace($this->_namespace);

dans Zend_Auth_Storage_Session.....

Dernière modification par PsY (21-05-2008 14:35:42)


PEBKAC !

Hors ligne

 

#8 21-05-2008 14:34:49

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

ton bout de code ci dessus est placé ou ??

essaie dans le bootstrap avant le dispatch du controller puis (si ca marche) dans le init du controller appelé  ...

il doit y avoir quelque chose qui appel un Zend_session destroy ... je vois rien d'autre

utilise-tu des Zend_session_Namespace avant ?

Hors ligne

 

#9 21-05-2008 14:38:01

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

oui car Zend_auth se sert de la session pour garder les info d'authen.

donc quand tu fait le has->identify, il recupere son Namespace pour voir s'il y a rangé des infos.

Lorsque tu fait un new Zend_Session_Namespace , ca demarre la session si elle est pas deja demarré.

Et la il essaie de la demmarer mais la session est flaguée comme detruite.

Doc il faut trouvé où elle est detruite.

Je sais pas si je suis clair ....

Dernière modification par ichevc02 (21-05-2008 14:39:30)

Hors ligne

 

#10 21-05-2008 14:39:15

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

erf je viens d'éditer mon précédent message.

Sinon, tous les scripts sont dans le "prepend"

$authInstance->hasIdentity()
appelle Zend/Auth -> getStorage
qui lui crée
$this->setStorage(new Zend_Auth_Storage_Session());

qui lui :

$this->_session   = new Zend_Session_Namespace($this->_namespace);

qui lui fait un

Zend_Session::start(true); // attempt auto-start (throws exception if strict option set)


je ne vois pas comment éviter le problème...ce que je ne comprends pas, c'est comment ça peut marcher chez les autres?

Comment est-ce que tu gères tes sessions et tes authentifications (si tu en as? )


PEBKAC !

Hors ligne

 

#11 21-05-2008 14:40:50

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

le problème c'est que j'ai mis un

die( '1stDestroy');

dans la première ligne de ma fonction Zend/Session.php -> function destroy(...), et que ça die jamais .....

Dernière modification par PsY (21-05-2008 14:41:36)


PEBKAC !

Hors ligne

 

#12 21-05-2008 14:43:07

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

Le probleme se situte a mon avis en amont dans ton appli.

c'est a dire avant ton appel a zend_auth->has->identity().

car tu as detruit ta session lors de la requete donc tu ne peux plus t'en servir (cf message précedent).

Hors ligne

 

#13 21-05-2008 14:44:09

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

vi, c'est bizarre ...

Hors ligne

 

#14 21-05-2008 14:48:57

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

et si j'enlève le

Zend_Session::start (  );

avant le

if ($authInstance->hasIdentity()===true) {

j'ai le message
string(129) "echec du session start : You must explicitly start the session with Zend_Session::start() when session options are set to strict."

cf:

Code:

try{
        $d = $authInstance->hasIdentity();
    }catch(Exception $e){
        var_dump("echec du session start : ".$e->getMessage());
        ob_flush();
        die();
    }

PEBKAC !

Hors ligne

 

#15 21-05-2008 14:57:07

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

Bon, j'ai tout viré sauf les defines des chemins et il me reste:

Code:

//Zend_Loader
require_once ('Zend/Loader.php');

//Init
Zend_Loader::registerAutoload ();
Zend_Session::start ();
$authInstance = Zend_Auth::getInstance();
try{
        $d = $authInstance->hasIdentity();
}catch(Exception $e){
        var_dump("echec du session start : ".$e->getMessage());
        ob_flush();
        die();
}

j'obtiens le message:

string(121) "echec du session start : The session was explicitly destroyed during this request, attempting to re-start is not allowed."

:-(

Dernière modification par PsY (21-05-2008 14:57:52)


PEBKAC !

Hors ligne

 

#16 21-05-2008 14:58:21

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

essaie ce code dans ton bootstrap avant le dispatch du controller.

Hors ligne

 

#17 21-05-2008 14:59:52

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

ben ce code est déjà dans le prépend ( en gros c mon bootstrap)


PEBKAC !

Hors ligne

 

#18 21-05-2008 15:09:41

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

ok j'avais pas saisi.

Bah la, j'ai plus trop d'idée.
As-tu testé que tes session (sans zend_auth) fonctionne bien ?

Hors ligne

 

#19 21-05-2008 15:27:53

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

Yes! tu as mis le doigt dessus.

sans l'authentification, la session marche.

.....serait-ce un bug?


PEBKAC !

Hors ligne

 

#20 21-05-2008 15:32:28

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

ca marche chez moi  wink (la réponse qui enerve)

Hors ligne

 

#21 21-05-2008 15:38:23

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

tu as testé

http://www.paste2.org/p/30050

!!?? et ça marche ?


PEBKAC !

Hors ligne

 

#22 21-05-2008 17:02:45

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

oui
voici exactement le petit boostrap de test :

Code:

$start        = microtime(true);
$niveauErreur = E_ALL & ~E_NOTICE;
error_reporting($niveauErreur);
ini_set('display_error', 'Off');
//iconv_set_encoding('internal_encoding', 'ISO-8859-1');
$ini = ini_set("soap.wsdl_cache_enabled", 0);
ini_set('zlib.output_compression', '0');
$longestTime = 0;
setlocale(LC_ALL, 'fr_FR');
date_default_timezone_set('Europe/Paris');


set_include_path('.' . PATH_SEPARATOR . './library'
. PATH_SEPARATOR . './library/incubator'
. PATH_SEPARATOR . './modules/models'
. PATH_SEPARATOR . './modules/webService/models'
. PATH_SEPARATOR . get_include_path());
require_once ('Zend/Loader.php');
//Init
Zend_Loader::registerAutoload ();
Zend_Session::start ();
$authInstance = Zend_Auth::getInstance();
try{
        $d = $authInstance->hasIdentity();
}catch(Exception $e){
        var_dump("Fail : ".$e->getMessage());
        ob_flush();
        die();
}
die('ca a marché');

resultat :
ca a marché

Hors ligne

 

#23 21-05-2008 17:37:06

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

ah....
je viens de poster sur la mailing list....
http://www.nabble.com/Zend_Session-coup … 64322.html

on verra bien

je teste ton script demain :-)
@+
et merci


PEBKAC !

Hors ligne

 

#24 22-05-2008 11:55:21

PsY
Membre
Lieu: Paris
Date d'inscription: 21-08-2007
Messages: 21

Re: [Résolu][Zend_Session]->Zend_Auth -> exeption avec ZF> 1.0.3

J'ai fini de tester ton script et il n'a pas fonctionné.

j'ai changé le démarrage de ma session:

Code:

Zend_Session::setOptions( array('strict'=>false) );

sans la démarrer, et ce sera

Code:

$authInstance = Zend_Auth::getInstance();
if ($authInstance->hasIdentity()===true) {
    // blah
}

qui s'en chargera. Là, j'ai toujours mon souci de démarrage de session:

'You must explicitly start the session with Zend_Session::start() when session options are set to strict.'

En revanche, je crois avoir trouvé mon souci:

Code:

$auth = Zend_Auth::getInstance();
//set the custom storage class to use
//$auth->setStorage(new My_Auth_Storage_CustomStorage());

quand je veux utiliser ma propre classe de Storage, il ne faut surtout pas utiliser le code ci-dessus plusieurs fois.

Il doit y avoir des effets de bord indésirables que je ne comprends pas (en tous cas pour l'instant) qui settent self::$_destroyed
de la classe Zend_Session à autre chose que true (alors que ça doit être un booléen):
Exemple: j'ai créé un My_View_Helper_LogoutElement (Element de déconnexion) et j'y avais mis le morceau de code ci-dessous, la variable
self::$_destroyed à pris pour valeur 'My_View_Helper_LogoutElement'.

J'ai un autre exemple où la variable as pris pour valeur 'Object id #22'...dans un controlleur. Donc j'ai modifié ce code pour Zend_Auth::getInstance()->getStorage() puisque setStorage a déjà été utilisé dans le bootstrap.

Soit c'est une grossière erreur de ma part au niveau développement (je privilégie cette hypothèse, puisque je ne suis pas un as du dev), soit il faudrait modifier le code de Zend/Session.php pour y inclure le test suivant en début de fonction:

Code:

if (! is_bool(self::$_destroyed) && !empty(self::$_destroyed) ) {
            require_once 'Zend/Session/Exception.php';
            throw new Zend_Session_Exception('The session is set as destroyed with the value "'.self::$_destroyed.'" but has not been explicitly destroyed during this request.');
}

En tous cas, merci merci pour ton aide !

je vais poster ça sur la mailing list aussi, et pourquoi pas ouvrir un ticket?
http://framework.zend.com/issues/browse/ZF-3308

Psy

Dernière modification par PsY (22-05-2008 14:27:20)


PEBKAC !

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