我有一个Yii 1.x应用程序,它使用WebUser组件作为网站的登录部分 - 在我的config / main.php中我的组件部分中有以下块,它会在2小时后自动超时(例如3600 x 2或7200秒)。
在用户被踢出的意义上这很好用。我的应用程序在设定的秒数后 - 但我如何修改它以便注销某些'类型'不同期满的用户。
例如,如果用户键入== 1,则在3600秒后退出,如果用户键入== 2,则在7200秒后退出...
// config/main.php
'components' => array(
'user' => array(
'class' => 'application.components.WebUser',
'allowAutoLogin' => true,
'loginUrl' => array('frontend/user/login'),
'loginRequiredAjaxResponse' => 'CR_SESSION_EXPIRED',
'authTimeout' => 3600*2, // auto-logout after 2 hours
),
.......
注意 - 这是使用Yii 1.x而不是Yii 2.0。
我认为这需要在WebUser集成中而不是配置文件中。
- 更新 - 我已将以下块添加到WebUser.php组件(扩展CWebUser)
public function init() {
parent::init();
if (($user = $this->getState('userModel')) !== null) {
$this->authTimeout = 5;
$this->absoluteAuthTimeout = 5;
$this->setUserData(unserialize($user));
}
}
我已设置authTimeout& absoluteAuthTimout到5秒,但我仍然在5秒后仍然保持登录状态......任何想法?
答案 0 :(得分:2)
就像我在评论中说的那样。
我认为您应该能够覆盖WebUser
课程中的值。
<?php
class WebUser extends CWebUser{
public $authTimeouts = array(); //array with the timeouts
public function init(){
//you need to get the userType first
if(array_key_exists($userType,$this->authTimeouts)){
$authTimeout = $this->authTimeouts[$userType];
}
parent::init();
}
}
然后您的配置应如下所示:
// config/main.php
'components' => array(
'user' => array(
'class' => 'application.components.WebUser',
'allowAutoLogin' => true,
'loginUrl' => array('frontend/user/login'),
'loginRequiredAjaxResponse' => 'CR_SESSION_EXPIRED',
'authTimeout' => 3600*2, // auto-logout after 2 hours
'authTimeouts'=> array(
'userType1' => 10,
'userType2' => 500,
),
),
......
这样的事情。
有关源代码和init()
函数的更多信息,请参阅:
https://github.com/yiisoft/yii/blob/1.1.16/framework/web/auth/CWebUser.php#L196