我正在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。
答案 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
),
),
);