Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii用户在15-30分钟后注销,尽管会话超时设置为至少1天_Php_Session_Cookies_Yii_Session Timeout - Fatal编程技术网

Php Yii用户在15-30分钟后注销,尽管会话超时设置为至少1天

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

我已将Yii配置文件的相关部分包括在下面:

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')user->logout();
$this->redirect(数组('/site/login'))//
}否则{
yii::app()->user->setState('userSessionTimeout',time()+yii::app()->params['sessionTimeoutSeconds');
返回true;
}
}否则{
返回true;
}
}
并将其添加到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')user->logout();
$this->redirect(数组('/site/login'))//
}否则{
yii::app()->user->setState('userSessionTimeout',time()+yii::app()->params['sessionTimeoutSeconds');
返回true;
}
}否则{
返回true;
}
}
并将其添加到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']user->logout();
}否则{
Yii::$app->session->set('userSessionTimeout',time()+Yii::$app->params['sessionTimeoutSeconds');
返回true;
}
}否则{
返回true;
}
}
在视图/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']user->logout();
}否则{
Yii::$app->session->set('userSessionTimeout',time()+Yii::$app->params['sessionTimeoutSeconds');
返回true;
}
}否则{
返回true;
}
}
在视图/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分钟,所以我更改了什么