php session cookies yii session-timeout

php - Los usuarios de Yii se desconectan después de 15-30 minutos a pesar de que los tiempos de espera de la sesión se establecen en al menos 1 día.



session cookies (5)

Pruebe esto: el primero cuando inició sesión puede establecer setState esto:

yii::app()->user->setState(''userSessionTimeout'', time() + Yii::app()->params[''sessionTimeoutSeconds'']);

agregar esos son texto companents.controller.php

public function beforeAction(){ // Check only when the user is logged in if ( !Yii::app()->user->isGuest) { if ( yii::app()->user->getState(''userSessionTimeout'') < time() ) { // timeout Yii::app()->user->logout(); $this->redirect(array(''/site/login'')); // } else { yii::app()->user->setState(''userSessionTimeout'', time() + Yii::app()->params[''sessionTimeoutSeconds'']) ; return true; } } else { return true; } }

y agrega que están en el archivo config main.php:

''params'' => array (''sessionTimeoutSeconds'' => 1800, // 30 minutos),

He incluido las partes relevantes de nuestro archivo de configuración de Yii a continuación:

return array( ... ''components''=>array( ''session'' => array( ''timeout'' => 86400, ), ''user''=>array( ''allowAutoLogin'' => true, ''autoRenewCookie'' => true, ''authTimeout'' => 31557600, ), ... ), ... );

También he estado en php.ini y he establecido session.gc_maxlifetime = 86400 pero esto aún no ha solucionado el problema.

Actualmente, estoy totalmente perdido en cuanto a qué otra cosa podría estar causando que se agote el tiempo de espera y desconecte al usuario después de aproximadamente 15-30 minutos de inactividad. Lo ideal sería que los usuarios permanezcan conectados durante al menos un día de inactividad (y más allá de cerrar la ventana del navegador, permitiendo las preferencias del navegador).

He rastreado google, Yii y stack overflow y simplemente no puedo encontrar nada que esté pasando por alto ... pero claramente estoy pasando por alto algo. Si alguien puede ayudarme, estaría muy agradecido.

Se solicitó una muestra del código típico que estamos usando para iniciar sesión en los usuarios y se incluye a continuación:

$identity = new UserIdentity(''facebook'', $id, $user->name, $user->email); $loggedIn = Yii::app()->user->login($identity); $this->subscriptionChecker->updateCurrentUserSubscribed();

Esto es bastante típico de cualquier momento en que se Yii::app()->user->login()

Desde Chrome, aquí están las cookies que tengo para el sitio y sus vencimientos (después de borrar todas las cookies y simplemente iniciar sesión):

PHPSESSID expires When the browsing session ends // I''m informed these are set by google analytics __utma created Friday, 12 October 2012 14:05:31 expires Sunday, 12 October 2014 14:05:31 __utmb created Friday 12 October 2012 14:05:31 expires Friday 12 October 2012 14:35:31, __utmc created Friday, 12 October 2012 14:05:31 expires When the browsing session ends __utmz created Friday 12 October 2012 14:05:31 expires Saturday 13 April 2013 02:05:31 // end google analytics


Tuve un problema idéntico, incluso si hago authTimeout 3600 * 24 (24 horas), el usuario sigue cerrando la sesión en aproximadamente 30 minutos. Descubrí que en php.ini hay una opción:

session.gc_maxlifetime

por defecto, esta opción es de 24 minutos, así que cambié para lo que necesitaba

session.gc_maxlifetime = 86400

24 horas. Problema resuelto para mí.

Espero que esto pueda ayudar a alguien!


http://www.yiiframework.com/doc/api/1.1/CWebUser#login-detail

Gracias a la ayuda de Arfeen que me dirigió en la dirección correcta, a menos que establezca el segundo parámetro de Yii::app()->user->login() , resulta que Yii no usará una cookie persistente, como el segundo parámetro está predeterminado en 0. Este valor 0 predeterminado anula todo lo demás que haya configurado para hacer con los tiempos de espera.


Para Yii2

Esta solución después de iniciar sesión para las cookies de sesión establece el tiempo de caducidad después de 7 días:

''components'' => [ ''session'' => [ ''class'' => ''yii/web/Session'', ''cookieParams'' => [''lifetime'' => 7 * 24 *60 * 60] ],


Para la versión Yii2

En su /config/params.php configure el tiempo de espera en segundos:

''sessionTimeoutSeconds'' => ''1800'',

En su método de controladores / SiteController.php actionLogin () agregue lo siguiente:

// Set the user session timeout Yii::$app->session->set(''userSessionTimeout'', time() + Yii::$app->params[''sessionTimeoutSeconds'']);

También agregue el método beforeAction en SiteController.php

public function beforeAction($action) { if (!parent::beforeAction($action)) { return false; } // Check only when the user is logged in if ( !Yii::$app->user->isGuest) { if (Yii::$app->session[''userSessionTimeout''] < time()) { Yii::$app->user->logout(); } else { Yii::$app->session->set(''userSessionTimeout'', time() + Yii::$app->params[''sessionTimeoutSeconds'']); return true; } } else { return true; } }

En sus vistas / diseños / main.php: entre el encabezado DOM para agregar el encabezado de actualización automática para enviar la aplicación de vuelta a la vista de inicio de sesión.

<? if (!Yii::$app->user->isGuest) { ?> <meta http-equiv="refresh" content="<?php echo Yii::$app->params[''sessionTimeoutSeconds''];?>;"/> <? } ?>