2009-10-16 6 views
5

Mi sesión parece ser solo válida en la ventana/pestaña actual. También parece agotar el tiempo de espera rápidamente. He aquí cómo Actualmente estoy tratando de hacerlo:Zend Framework rememberMe() no parece recordarme

Esto está en mi controlador de entrada:

$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); 

Y esto está en mi archivo de arranque:

Zend_Session::start(); 

soy relativamente nuevo en algunos de estas cosas, así que tengan paciencia conmigo! Cualquier ayuda sería muy apreciada.

Respuesta

3

Esto es lo que estaba sucediendo. Este sitio web estaba en un servidor que comparte una carpeta de sesiones con otro sitio web en el servidor. Aunque aumenté la duración de la sesión con ini_set, la otra aplicación todavía estaba eliminando mis sesiones.

Para resolver esto simplemente establezco session.save_path en una nueva carpeta. ¡Problema resuelto!

1

Mirando a través de la fuente de Zend_Session, la rememberMe() método llama rememberUntil() que llama al método session_set_cookie_params construido en PHP()

Así que es posible que desee para ver sus valores de php.ini para session.cookie_lifetime. Si no es 0, entonces Zend_Session :: rememberMe() sería inútil a menos que el valor sea menor que session.cookie_lifetime. En ese caso, debería establecerlo en 0 en php.ini o en su aplicación utilizando ini_set() como se indica en el primer comentario en el session.cookie_lifetime man page.

+0

Hola Marcos, lo siento por la respuesta tardía. No he pensado en mirar aquí dentro de unos días. cookie_lifetime se establece de hecho en 0. He leído que rememberMe necesita ser llamado antes de session_start() para que session_set_cookie_params pueda establecer el tiempo de vida. Sin embargo, también he leído que zend_session :: start() debe ir en el bootstrap, donde se llama antes de que se ejecute el script de inicio de sesión y se ejecuta rememberMe(). ¿Alguna idea? – Brian

+0

Dale una oportunidad, pega la llamada rememberMe justo después de que comience la sesión. No puede hacer daño configurar el tiempo de espera allí ya que todavía no estás autenticando – Mark

2

Solo quiero agregar que cambie session.save_path en .htaccess con la siguiente fila para que funcione. Vi la respuesta pensé que lo había cambiado en .ini, pero está en el .htaccess.

Por ejemplo:

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