1.关于超时时间:
以appadmin为例子
@fecshop\models\mysqldb\adminUser\AdminUserLogin.php
/**
* @param $duration | Int
* 对于参数$duration:
* 1. 当不开启cookie时,$duration的设置是无效的,yii2只会从user组件Yii::$app->user->authTimeout
* 中读取过期时间
* 2. 当开启cookie,$duration是有效的,会设置cookie的过期时间。
* 如果不传递时间,默认使用 Yii::$service->session->timeout的值。
* 总之,为了方便处理cookie和session的超时时间,统一使用
* session的超时时间,这样做的好处为,可以让account 和 cart session的超时时间保持一致
*/
public function login($duration = 0)
{
if (!$duration) {
if (Yii::$service->session->timeout) {
$duration = Yii::$service->session->timeout;
}
}
if ($this->validate()) {
//return \Yii::$app->user->login($this->getAdminUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
return \Yii::$app->user->login($this->getAdminUser(), $duration);
} else {
return false;
}
}
超时时间是:$duration = Yii::$service->session->timeout;
因此,超时时间就是session services设置的timeout
的值
2.找到这个session services文件
@fecshop/services/Session.php
public function init()
{
parent::init();
if (\Yii::$app->user->enableSession == true) {
$this->_session = new SessionPhp; // phpsession
} else {
$currentService = $this->getStorageService($this);
$this->_session = new $currentService();
/*
if ($this->storageEngine == 'mongodb') {
$this->_session = new MongoDbSession;
}else if ($this->storageEngine == 'mysqldb') {
$this->_session = new MysqlDbSession;
}else if ($this->storageEngine == 'redis') {
$this->_session = new RedisSession;
}
*/
}
$appName = Yii::$service->helper->getAppName();
$accessTokenTimeoutConfig = Yii::$app->store->get($appName.'_base', 'customer_access_token_timeout');
$accessTokenUpdateTimeLimitConfig = Yii::$app->store->get($appName.'_base', 'customer_access_token_update_time_limit');
$this->timeout = $accessTokenTimeoutConfig ? $accessTokenTimeoutConfig : 86400 ;
$this->updateTimeLimit = $accessTokenUpdateTimeLimitConfig ? $accessTokenUpdateTimeLimitConfig : 600 ;
// var_dump([$this->timeout, $this->updateTimeLimit]);
}
可以看到代码:
$accessTokenTimeoutConfig = Yii::$app->store->get($appName.'_base', 'customer_access_token_timeout');
$this->timeout = $accessTokenTimeoutConfig ? $accessTokenTimeoutConfig : 86400 ;
这里的值,从后台配置值取,如果取不到,则使用86400秒
只有appserver后台入口进行了后台配置,后台菜单:网站配置
--> Appserver配置
--> 基础配置
对于appfront
和appserver
,该值直接使用了默认86400(秒),也就是24小时
这个地方的处理,不够完美,后面看看优化处理一下
3.登陆是基于cookie的,因此将浏览器关掉重新打开,还是登陆的
以appadmin为例子,打开文件@fecshop/app/appadmin/config/appadmin.php
找到组件配置,如下:
'components' => [
'user' => [
'identityClass' => 'fecshop\models\mysqldb\AdminUser',
'enableAutoLogin' => true,
],
将enableAutoLogin
设置为true,即开启cookie登陆。