2009-10-16 7 views
5

Ma session ne semble être valide que dans la fenêtre/onglet en cours. En outre, il semble que le délai expire rapidement. Voici comment je tente actuellement de le faire:Zend Framework rememberMe() ne semble pas se souvenir de moi

Ceci est mon contrôleur de connexion:

$adapter = $this->getAuthAdapter($data); 
$auth = Zend_Auth::getInstance(); 
$result = $auth->authenticate($adapter); 

if (!$result->isValid()) { 
    $this->view->err = "Invalid username or password.<br/>Please try again."; 
    return $this->render('index'); // re-render the login form 
} 

Zend_Session::rememberMe(60*60*24*7*4); 

Et cela est dans mon bootstrap:

Zend_Session::start(); 

Je suis relativement nouveau pour certains de cette substance, alors ours avec moi! Toute aide serait grandement appréciée.

Répondre

3

Voici ce qui se passait. Ce site Web se trouvait sur un serveur partageant un dossier de sessions avec un autre site Web sur le serveur. Même si j'ai augmenté la durée de vie de la session avec ini_set, mes sessions étaient toujours supprimées par l'autre application.

Pour résoudre ce problème, je définis simplement session.save_path dans un nouveau dossier. Problème résolu!

1

En regardant à travers la source de Zend_Session, la méthode appelle rememberUntil() rememberMe() qui appelle la construction dans session_set_cookie_params méthode php()

Vous pouvez vérifier vos valeurs php.ini pour session.cookie_lifetime. Si ce n'est pas 0, alors Zend_Session :: rememberMe() serait inutile à moins que la valeur ne soit inférieure à session.cookie_lifetime. Dans ce cas, vous voudrez le mettre à 0 dans php.ini ou dans votre application en utilisant ini_set() comme indiqué dans le premier commentaire sur le session.cookie_lifetime man page.

+0

Salut Marc, désolé pour la réponse tardive. Je n'ai pas pensé à regarder ici dans quelques jours. cookie_lifetime est en fait mis à 0. J'ai lu que rememberMe doit être appelé avant session_start() pour que session_set_cookie_params puisse définir la durée de vie. Cependant, j'ai aussi lu que zend_session :: start() devrait aller dans le bootstrap, où il est appelé avant que le script de login ne s'exécute et n'exécute rememberMe(). Des pensées? – Brian

+0

Donnez-lui un coup de feu, collez l'appel rememberMe juste après le début de la session. Cela ne peut pas nuire à la définition du délai d'expiration puisque vous n'êtes pas encore authentifié – Mark

2

Je veux juste ajouter que vous changez le session.save_path dans le .htaccess avec la ligne suivante pour le faire fonctionner. J'ai vu la réponse a pensé que je l'ai changé dans le .ini, mais c'est dans le .htaccess.

Par exemple:

php_value session.save_path /home/kaos/data/sessions/ 
Questions connexes