Php Yii用户在15-30分钟后注销,尽管会话超时设置为至少1天
我已将Yii配置文件的相关部分包括在下面:Php Yii用户在15-30分钟后注销,尽管会话超时设置为至少1天,php,session,cookies,yii,session-timeout,Php,Session,Cookies,Yii,Session Timeout,我已将Yii配置文件的相关部分包括在下面: return array( ... 'components'=>array( 'session' => array( 'timeout' => 86400, ), 'user'=>array( 'allowAutoLogin' => true, 'autoRenewCookie' => tr
return array(
...
'components'=>array(
'session' => array(
'timeout' => 86400,
),
'user'=>array(
'allowAutoLogin' => true,
'autoRenewCookie' => true,
'authTimeout' => 31557600,
),
...
),
...
);
我也进入了php.ini并设置了session.gc\u maxlifest=86400
,但这仍然没有解决问题
目前,我完全不知道还有什么会导致它超时,并在大约15-30分钟的不活动后注销用户。理想情况下,用户应保持登录状态至少一天(并且在浏览器首选项允许的情况下,关闭浏览器窗口之后)
我拖网搜索了google、Yii和stack overflow,却找不到任何我忽略的东西。。。但很明显,我忽略了一些事情。如果有人能帮我,我将非常感激
请求了我们用于登录用户的典型代码示例,包括:
$identity = new UserIdentity('facebook', $id, $user->name, $user->email);
$loggedIn = Yii::app()->user->login($identity);
$this->subscriptionChecker->updateCurrentUserSubscribed();
这在调用Yii::app()->user->login()
时非常典型
在Chrome中,以下是我为该站点提供的cookie及其过期日期(在清除所有cookie并登录之后): 感谢Arfeen的帮助,他为我指出了正确的方向,除非您设置
Yii::app()->user->login()
的第二个参数,否则Yii将不会使用持久cookie,因为第二个参数默认为0。此默认0值将覆盖您可能设置的与超时有关的任何其他内容。
感谢Arfeen的帮助,他为我指出了正确的方向,除非您设置Yii::app()->user->login()
的第二个参数,否则Yii将不会使用持久cookie,因为第二个参数默认为0。此默认0值将覆盖您可能设置的与超时有关的任何其他内容。尝试以下操作:
第一个
登录后,您可以设置setState
这:
添加那些文本components.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;
}
}
动作前公共功能(){
//仅当用户登录时检查
如果(!Yii::app()->user->isGuest){
如果(yii::app()->user->getState('userSessionTimeout')
并将其添加到config main.php文件中:
'params'=>数组('sessionTimeoutSeconds'=>1800,//30分钟)
试试这个:
第一个
登录后,您可以设置setState
这:
添加那些文本components.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;
}
}
动作前公共功能(){
//仅当用户登录时检查
如果(!Yii::app()->user->isGuest){
如果(yii::app()->user->getState('userSessionTimeout')
并将其添加到config main.php文件中:
'params'=>数组('sessionTimeoutSeconds'=>1800,//30分钟)
对于Yii2版本 在/config/params.php中,以秒为单位设置超时:
'sessionTimeoutSeconds' => '1800',
在controllers/SiteController.php actionLogin()方法中添加以下内容:
// Set the user session timeout
Yii::$app->session->set('userSessionTimeout', time() + Yii::$app->params['sessionTimeoutSeconds']);
还要在SiteController.php中添加beforeAction方法
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;
}
}
行动前的公共功能($action)
{
if(!parent::beforeAction($action)){
返回false;
}
//仅当用户登录时检查
如果(!Yii::$app->user->isGuest){
如果(Yii::$app->session['userSessionTimeout']
在视图/layouts/main.php中:在头DOM之间添加自动刷新头,将应用程序发送回登录视图
<? if (!Yii::$app->user->isGuest) { ?>
<meta http-equiv="refresh" content="<?php echo Yii::$app->params['sessionTimeoutSeconds'];?>;"/>
<? } ?>
对于Yii2版本
在/config/params.php中,以秒为单位设置超时:
'sessionTimeoutSeconds' => '1800',
在controllers/SiteController.php actionLogin()方法中添加以下内容:
// Set the user session timeout
Yii::$app->session->set('userSessionTimeout', time() + Yii::$app->params['sessionTimeoutSeconds']);
还要在SiteController.php中添加beforeAction方法
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;
}
}
行动前的公共功能($action)
{
if(!parent::beforeAction($action)){
返回false;
}
//仅当用户登录时检查
如果(!Yii::$app->user->isGuest){
如果(Yii::$app->session['userSessionTimeout']
在视图/layouts/main.php中:在头DOM之间添加自动刷新头,将应用程序发送回登录视图
<? if (!Yii::$app->user->isGuest) { ?>
<meta http-equiv="refresh" content="<?php echo Yii::$app->params['sessionTimeoutSeconds'];?>;"/>
<? } ?>
对于Yii2
登录会话cookie后,此解决方案将在7天后过期:
'components' => [
'session' => [
'class' => 'yii\web\Session',
'cookieParams' => ['lifetime' => 7 * 24 *60 * 60]
],
对于Yii2
登录会话cookie后,此解决方案将在7天后过期:
'components' => [
'session' => [
'class' => 'yii\web\Session',
'cookieParams' => ['lifetime' => 7 * 24 *60 * 60]
],
我有一个相同的问题,即使我使authTimeout 3600*24(24小时),用户仍然在大约30分钟内注销。
我发现在php.ini上有一个选项:
session.gc_最大生存期
默认情况下,这个选项是24分钟,所以我更改了什么