Php Yii框架中的HttpSession会话超时不起作用

Php Yii框架中的HttpSession会话超时不起作用,php,session,yii,yii-components,Php,Session,Yii,Yii Components,我正在用Yii创建一个web应用程序。如果用户空闲30分钟,我尝试执行sessiontimeout。之后,他应该再次登录。。但这是行不通的。我正在使用CHttpSession。但是,如果我使用CDbHttpSession而不是CHttpSession,则效果良好 这是我的密码 'user' => array( 'class' => 'WebUser', 'loginUrl' => array('site/loginaccount'),

我正在用Yii创建一个web应用程序。如果用户空闲30分钟,我尝试执行sessiontimeout。之后,他应该再次登录。。但这是行不通的。我正在使用CHttpSession。但是,如果我使用CDbHttpSession而不是CHttpSession,则效果良好

这是我的密码

'user' => array(
        'class' => 'WebUser',
        'loginUrl' => array('site/loginaccount'),
        'allowAutoLogin' => true,
    ),
            // uncomment the following to enable URLs in path-format
            'session' => array(
       'class'=>'CHttpSession',
        'timeout'=>$params['session_timeout'],
        'autoStart'=>true,
    ),

还有什么可以让这项工作在CHttpSession中发挥作用的吗?由于某些原因,我无法在web应用程序中使用CDbHttpSession。

protected/config/main.php:定义会话超时

$sessionTimeout = 5; // 5 secondes

return array(
        'params'=>array(
          'session_timeout'=> $sessionTimeout,
        );
        'components'=>array(
                'session' => array(
                        'class' => 'CDbHttpSession',
                        'timeout' => $sessionTimeout,
                ),
        ),
);
protected/views/layout/main.php:定义刷新

<html>
<head>  
        <?php if (!Yii::app()->user->isGuest) {?>
                <meta http-equiv="refresh" content="<?php echo Yii::app()->params['session_timeout'];?>;"/>
        <?php }?>
</head>
<body>
…
</body>
</html>

protected/config/main.php:定义会话超时

$sessionTimeout = 5; // 5 secondes

return array(
        'params'=>array(
          'session_timeout'=> $sessionTimeout,
        );
        'components'=>array(
                'session' => array(
                        'class' => 'CDbHttpSession',
                        'timeout' => $sessionTimeout,
                ),
        ),
);
protected/views/layout/main.php:定义刷新

<html>
<head>  
        <?php if (!Yii::app()->user->isGuest) {?>
                <meta http-equiv="refresh" content="<?php echo Yii::app()->params['session_timeout'];?>;"/>
        <?php }?>
</head>
<body>
…
</body>
</html>

如果希望用户在30分钟后自动注销,请尝试:

'user' => array(
    'class' => 'WebUser',
    'loginUrl' => array('site/loginaccount'),
    'allowAutoLogin' => true,
    'authTimeout' => 1800
),

如果希望用户在30分钟后自动注销,请尝试:

'user' => array(
    'class' => 'WebUser',
    'loginUrl' => array('site/loginaccount'),
    'allowAutoLogin' => true,
    'authTimeout' => 1800
),

我已经阅读了CHTTP会话的源代码。这是PHP会话的总结。因此,HttpSession的机制与PHP会话相同

public function setTimeout($value)
{
    ini_set('session.gc_maxlifetime',$value);
}
以上是超时设置器的代码。这只是PHP的ini设置的设置。根据,在maxlifetime之后,会话可能会被清理,但不确定

它的概率可以通过session.gc\u概率设置。默认值为1,表示1%。因此,您可以将其设置为100,使垃圾收集过程在每次运行脚本时都运行

将设置更改为

'session' => array(
    'class'=>'CHttpSession',
    'timeout'=>$params['session_timeout'],
    'autoStart'=>true,
    'gCProbability' => 100,
),

希望有帮助。

我已经阅读了CHttpSession的源代码。这是PHP会话的总结。因此,HttpSession的机制与PHP会话相同

public function setTimeout($value)
{
    ini_set('session.gc_maxlifetime',$value);
}
return array('components'=>array(
      'session'=>array( 
            'timeout' => 1800
        ),
    ),
);
以上是超时设置器的代码。这只是PHP的ini设置的设置。根据,在maxlifetime之后,会话可能会被清理,但不确定

它的概率可以通过session.gc\u概率设置。默认值为1,表示1%。因此,您可以将其设置为100,使垃圾收集过程在每次运行脚本时都运行

将设置更改为

'session' => array(
    'class'=>'CHttpSession',
    'timeout'=>$params['session_timeout'],
    'autoStart'=>true,
    'gCProbability' => 100,
),

希望有帮助。

我知道它对CDBHTTP会话有效。我在找你的工作。。有什么想法吗?我知道它对CDBHTTP会话有效。我在找你的工作。。有什么想法吗?请,加一些解释请,加一些解释
return array('components'=>array(
      'session'=>array( 
            'timeout' => 1800
        ),
    ),
);