用户类型在 x 秒后自动注销会话 (Yii 1.x)
Auto-logout of session after x seconds for a user type (Yii 1.x)
我有一个 Yii 1.x 应用程序,它使用 WebUser 组件作为网站的登录部分 - 在我的 config/main.php 我的组件部分中有以下块这将在 2 小时后自动使会话超时(例如 3600 x 2 或 7200 秒)。
在设定的秒数后用户是我的应用程序的 'kicked out' 的意义上,这工作正常 - 但我将如何修改它以使此注销某些 'types' 用户不同的到期时间。
例如,如果用户类型 == 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 秒后仍保持登录状态...有什么想法吗?
就像我在评论中说的那样。
我认为您应该能够覆盖 WebUser
class 中的值。
<?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
我有一个 Yii 1.x 应用程序,它使用 WebUser 组件作为网站的登录部分 - 在我的 config/main.php 我的组件部分中有以下块这将在 2 小时后自动使会话超时(例如 3600 x 2 或 7200 秒)。
在设定的秒数后用户是我的应用程序的 'kicked out' 的意义上,这工作正常 - 但我将如何修改它以使此注销某些 'types' 用户不同的到期时间。
例如,如果用户类型 == 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 秒后仍保持登录状态...有什么想法吗?
就像我在评论中说的那样。
我认为您应该能够覆盖 WebUser
class 中的值。
<?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