会话超时不适用于Yii框架中的CHttpSession

时间:2013-11-21 08:52:13

标签: php session yii yii-components

我正在Yii中创建一个Web应用程序。我试图做一个sessiontimeout,如果用户闲置30分钟。之后他应该再次登录..但这不起作用。我正在使用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。

4 个答案:

答案 0 :(得分:5)

如果您希望用户在30分钟后自动退出,请尝试:

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

答案 1 :(得分:1)

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>

答案 2 :(得分:1)

我已经阅读了CHttpSession的源代码。它是PHP Session的包装。因此,CHttpSession的机制与PHP Session相同。

public function setTimeout($value)
{
    ini_set('session.gc_maxlifetime',$value);
}

以上是超时设定器的代码。它只是PHP的ini设置的设置。根据{{​​3}},在maxlifetime之后,会话只是“可能被清理”,这不是肯定的。

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

将您的设置更改为

'session' => array(
    'class'=>'CHttpSession',
    'timeout'=>$params['session_timeout'],
    'autoStart'=>true,
    'gCProbability' => 100,
),
希望它有所帮助。

答案 3 :(得分:0)

return array('components'=>array(
      'session'=>array( 
            'timeout' => 1800
        ),
    ),
);