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
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.
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!
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),
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]
],