2009-05-16 6 views
1

Pour des raisons qui m'échappent, une variable de session contenant le nom du client s'affiche pendant une courte période, puis disparaît.cakephp - la variable de session reste étrangement active

Dans le app_controller.php: beforeFilter()

if (isset($_SESSION['customer_name']) == false || 
    strlen($_SESSION['customer_name']) == 0) 
{ 
    $customer = $this->Customer->read(null, $auth['User']['customer_id']); 
    $name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname']; 
    $this->Session->write('customer_name', $name); 
    $this->set('name', $this->Session->read('customer_name')); 
} 
else 
{ 
    $this->set('name', $this->Session->read('customer_name')); 
} 

J'ai essayé des variations de vérifier si la session est définie comme la

if ($this->Session->check('customer_name') == false) 

Tout se comporte de la même manière bizarre, il s'affichera dans la vue pendant un petit moment, puis disparaîtra. Ne revient pas en fermant le navigateur ou en se connectant à nouveau. De petits changements aléatoires à ce code semblent le ramener à la vie pendant une courte période.

+0

Ma réponse est la réponse au problème que j'éprouvais, je Je suis juste en attente de StackOverflow pour me permettre de le définir. –

Répondre

0

Cette ligne:

$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname']; 

Permet $ name à l'égalité "", ce qui signifie qu'il a une strlen de 1 et n'est pas vide. Je ne sais pas pourquoi il n'a pas obtenu les données du client, mais maintenant je peux vérifier cette valeur.

0

Je ne sais pas vraiment quel est le problème, mais je commencerais par supprimer les appels $ _SESSION. Je voudrais aussi changer

strlen($_SESSION['customer_name']) == 0 

à

empty($_SESSION['customer_name']) 

La seule autre chose que je peux penser est de réduire votre niveau de sécurité dans /config/core.php, peut-être vous perdre entièrement la session?

2

Utilisez $this->Session->read() au lieu des appels $ _SESSION directs car cakephp peut stocker la session ailleurs que là où PHP natif l'attend.

En outre, je ne comprends pas vraiment ce que vous entendez par «disparaître pendant un petit moment», si vous restez sur la même page et que vous continuez à vous rafraîchir, est-ce que cela disparaît/disparaît?

La fermeture du navigateur pourrait très bien être la raison pour laquelle votre session doit être détruite, avez-vous aussi ce comportement sur différents navigateurs?

Quels sont vos enregistrements Session.* dans app/config/core.php?

+0

à l'origine j'ai utilisé lire et vérifier de l'aide de session, mais comme les choses sont devenues plus aléatoires, je l'ai abandonné. –

0

normalement la session expirera après quelques minutes dans le gâteau. Recherchez cette ligne dans le fichier de configuration/core.php:

Configurer :: write ('Session.timeout'

et le mettre à aimer 999999999. Cela devrait résoudre le problème

.
+0

Selon les commentaires de core.php, Session.timeout n'est pas utilisé si vous utilisez le paramètre Session.security. lequel le mien est mis à haute. –

+1

Session.timeout est toujours utilisé, en tant que multiplicateur. Voir le commentaire ci-dessus Security.level dans core.php et vous verrez les maths. –

1

Ce résolu notre problème:

if($this->Session->check('customer_name'))

Questions connexes