2012-10-12 77 views
20

He incluido las partes relevantes de nuestro archivo de configuración Yii a continuación:usuarios Yii están registrando a cabo después de 15-30 minutos a pesar de los tiempos de espera de sesión se establece en al menos 1 día

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

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

Actualmente, estoy absolutamente 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.


Una muestra de código típico que estamos utilizando para iniciar la sesión en los usuarios se solicitó 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 que Yii::app()->user->login() se llama


De 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 
+1

comprueba si usaste Yii :: app() -> usuario-> método de inicio de sesión para establecer el tiempo de sesión? – Arfeen

+0

Cuando iniciamos sesión en los usuarios no establecemos el tiempo de la sesión –

+1

Creo que la forma en que está ingresando a sus usuarios es importante aquí, ¿puede mostrar ese bit del código? –

Respuesta

14

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

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

+0

yup es por eso que pedí comprobarlo. ¿Pero verificaste qué valor recibes de la propiedad de esGuest del usuario de la aplicación yii? Y bienvenido de todos modos :) – Arfeen

+0

Sí, la propiedad de isGuest funcionaba correctamente, la usamos bastante. –

1

Prueba esto: primero cuando tienes acceso Usted puede configurar setstate esto:

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

añadir 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 añadir los están en el archivo config main.php:

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

+0

cómo código arriba en yii2 –

-2

Para la versión Yii2

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

'sessionTimeoutSeconds' => '1800', 

En los controladores de usted/método SiteController.php actionLogin(), agregue el siguiente:

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

También agregue el método beforeAction en el 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 su views/layouts/main.php: Entre el DOM cabeza para agregar la cabecera de actualización automática a la aplicación envía de nuevo a entrar aquí Ver.

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

Para Yii2

Esta solución después de inicio de sesión para las cookies de sesión establece Caducidad después de 7 días:

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

que tenía un problema idéntico, incluso si hago authTimeout 3600 * 24 (24 horas) el usuario aún cierra 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

sesión .gc_maxlifetime = 86400

24 horas. Problema resuelto para mí.

Espero que esto ayude a alguien!

Cuestiones relacionadas