web-dev-qa-db-fra.com

Yii utilisateurs étant déconnectés après 15-30 minutes malgré des délais d'expiration de session définis sur au moins 1 jour

J'ai inclus les parties pertinentes de notre fichier de configuration Yii ci-dessous:

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

J'ai également consulté php.ini et défini session.gc_maxlifetime = 86400 Mais cela n'a toujours pas résolu le problème.

Actuellement, je ne sais absolument pas quoi d'autre pourrait entraîner son expiration et déconnecter l'utilisateur après environ 15-30 minutes d'inactivité. Idéalement, les utilisateurs devraient rester connectés pendant au moins une journée d'inactivité (et au-delà de la fermeture de la fenêtre du navigateur, les préférences du navigateur le permettant).

J'ai chaluté google, Yii et le débordement de la pile et je ne trouve tout simplement rien que j'oublie ... mais clairement j'oublie quelque chose. Si quelqu'un peut m'aider, je soyez très reconnaissant.


Un exemple de code typique que nous utilisons pour se connecter aux utilisateurs a été demandé et est inclus ci-dessous:

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

Ceci est assez typique de chaque fois que Yii::app()->user->login() est appelée


De Chrome, voici les cookies que j'ai pour le site et leurs expirations (après avoir effacé tous les cookies et juste connecté):

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
22
Tom Busby

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

Grâce à l'aide d'Arfeen qui m'a pointé dans la bonne direction, à moins que vous ne définissiez le deuxième paramètre de Yii::app()->user->login() il s'avère que Yii n'utilisera pas de cookie persistant, car le Le deuxième paramètre par défaut est 0. Cette valeur par défaut de 0 remplace tout ce que vous pourriez avoir défini pour faire avec les délais d'attente.

15
Tom Busby

J'ai eu un problème identique, même si je fais authTimeout 3600 * 24 (24 heures), l'utilisateur faisant toujours la déconnexion dans environ 30 minutes. J'ai découvert que sur php.ini il y a une option:

session.gc_maxlifetime

par défaut, cette option est de 24 minutes, j'ai donc changé pour ce dont j'avais besoin

session.gc_maxlifetime = 86400

24 heures. Problème résolu pour moi.

J'espère que cela pourrait aider quelqu'un!

2
Fernando Carvalho

Essayez ceci: d'abord lorsque vous vous êtes connecté, vous pouvez définir setState ceci:

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

ajouter ce sont du texte compagnons.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;
            }
        }

et ajoutez ceux-ci dans le fichier config main.php:

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

1

Pour Yii2

Cette solution après la connexion pour les cookies de session définie expire après 7 jours:

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