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''];?>;"/>
<? } ?>