Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-01-2012 23:36:07

boulteu
Membre
Date d'inscription: 19-01-2012
Messages: 14

Problème de session incompréhensible !

Bonsoir,

Tout d'abord mon code :

Code:

<?php
$authInstance = Zend_Auth::getInstance();
$defaultNamespace = new Zend_Session_Namespace('Default');
$isRegister = $defaultNamespace->isRegister;
$isContact = $defaultNamespace->isContact;

if ($authInstance->hasIdentity()) {
    echo $this->action('index' , 'menu');        
} else {
    if ($isRegister == TRUE) {
        echo '<p class="bigtxt" align="justify">Votre inscription a bien été prise en charge.</p>
        <p align="justify"><br />Vous allez recevoir dans quelques secondes un email de confirmation.</p>
        <p><br /><a href="' . $this->url(array('controller'=>'index', 'action'=>'index')) . '">Retour à la page d\'accueil</a></p>';
        Zend_Session::destroy();
    } else {
        if ($isContact == TRUE) {
            echo '<p class="bigtxt" align="justify">Votre message a bien été envoyé.</p>
            <p><br /><a href="' . $this->url(array('controller'=>'index', 'action'=>'index')) . '">Retour à la page d\'accueil</a></p>';
            Zend_Session::destroy();
        } else {
            echo $this->action('index' , 'index');
        }
    }
}
?>

Ce code fonctionne... maintenant si je retire tout ce qui concerne Zend_Auth :

Code:

<?php
$defaultNamespace = new Zend_Session_Namespace('Default');
$isRegister = $defaultNamespace->isRegister;
$isContact = $defaultNamespace->isContact;

    if ($isRegister == TRUE) {
        echo '<p class="bigtxt" align="justify">Votre inscription a bien été prise en charge.</p>
        <p align="justify"><br />Vous allez recevoir dans quelques secondes un email de confirmation.</p>
        <p><br /><a href="' . $this->url(array('controller'=>'index', 'action'=>'index')) . '">Retour à la page d\'accueil</a></p>';
        Zend_Session::destroy();
    } else {
        if ($isContact == TRUE) {
            echo '<p class="bigtxt" align="justify">Votre message a bien été envoyé.</p>
            <p><br /><a href="' . $this->url(array('controller'=>'index', 'action'=>'index')) . '">Retour à la page d\'accueil</a></p>';
            Zend_Session::destroy();
        } else {
            echo $this->action('index' , 'index');
        }
    }
?>

Alors le code ne fonctionne plus et j'ai l'erreur 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.'

( ! ) Zend_Session_Exception: The session was explicitly destroyed during this request, attempting to re-start is not allowed.

Ma question est pourquoi ? (Je ne comprends vraiment pas pourquoi ?)

Hors ligne

 

#2 27-01-2012 09:08:55

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: Problème de session incompréhensible !

À mon avis, après l'exécution de ce code, tu essaies quelque par d'utiliser à nouveau les sessions ce qui provoque cette erreur.

Sinon, pourquoi utiliser Zend_Session::destroy ?

Hors ligne

 

#3 27-01-2012 09:55:12

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Problème de session incompréhensible !

Sinon j'ai une remarque sur ton code qui n'a rien à voir avec ton problème mais qui me semble absurde. En effet tu fais ce test

Code:

[lang=php]if ($isRegister == TRUE) { ...

Je voudrais juste t'alerter sur un test que tu fais qui est inutile. En effet, un if traite toujours un boolean puisque tu fais un test. Ce test va toujours te renvoyer true ou false.

Par exemple :

Code:

[lang=php]
$maVariable = "toto";
if ($maVariable == "toto") // ce test renvoie toujours vrai
{
...
}

if ($maVariable == "titi") // renvoi toujours false
{
...
}

Tu vois bien que dans mon exemple ci-dessus pour chaque test je récupère un boolean true ou false qui est interprété par le if.

Maintenant si je fais ceci :

Code:

[lang=php]
$maVariable = true;

if ($maVariable == true) { // ceci est absurde puisque $maVariable est déjà un boolean, c'est donc inutile de vérifier sa valeur puisque le test va me renvoyer de nouveau un boolean
...
}

// Il convient de faire ainsi :
if ($maVariable) {
...
}

Donc pour en revenir à ton bout de code (c'est la même chose pour $isContact) tu n'as pas besoin de vérifier la valeur du boolean puisque c'est déjà un boolean du coup tu peux te contenter de faire ceci et ça te coute un test en moins en plus d'être plus propre wink

Code:

[lang=php]if ($isRegister) {

Bonne continuation

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