1.使用方法
要设置子模块单独登陆,需要在各个模块中独立配置user组件,并配置idParam属性
主模块components中配置
'user' => [
'class'=>'\yii\web\User',
'identityClass' => 'backend\models\Admin',
]
主模块中获取user组件\Yii::$app->user
子模块components中配置
'user' => [
'class'=>'\yii\web\User',//子模块中user组件class属性不能省略,不然会报错
'identityClass' => 'frontend\models\User',
'idParam'=>'frontId',
]
子模块中获取user组件\Yii::$app->controller->module->user(控制器中$this->module->user)。多模块登陆方法到此为 止。不想看分析的可以就此打住。
2.源码分析
2.1 user组件重要属性
enableSession:是否允许用session保存账号id,实现session保存登陆状态
enableAutoLogin: 是否允许cookie自动登陆,只有enableSession为true时生效。另外在yii\web\User::login中 ($identity,$duration),$duration表示cookie有效时间,这有这个值大于0,cookie登陆才有效 $duration表示cookie有效时间,这有这个值大于0,cookie登陆才有效
autoRenewCookie:是否自动刷新cookie有效时间
idParam: session中存放账号id的key,不同模块登陆就靠这个属性了
identityClass : 账号AR类,必须实现接口IdentityInterface
authTimeoutParam: session中保存idParam的相对过期时间的key
authTimeout: authTimeoutParam的值
absoluteAuthTimeoutParam:session中保存idParam的绝对过期时间的key
absoluteAuthTimeout: absoluteAuthTimeoutParam的值
解释下相对过期时间与绝对过期时间:
每次在发起新请求后,如果当前时间小于相对过期时间,同时小于绝对过期时间,那么就把相对过期时间 authTimeoutParam的值加上authTimeout,绝对过期时间absoluteAuthTimeoutParam的值保持不变。如果当前时间小于相对过期时间,但是大于等于绝对过期时间,那么认为登陆过期。比如相对过期时间为30分钟,绝对过期时间为60分钟,在12:00点首次登陆,在enableSession为true的情况下,设置authTimeoutParam为当前时间12:00上+30分钟,absoluteAuthTimeoutParam为当前时间12:00上+60分钟。10分钟后请求再次到来,那么相对过期时间authTimeoutParam在当前时间12:10上加30分钟,绝对时间不变,就这样,不断请求,authTimeoutParam不断递增,但是absoluteAuthTimeoutParam始终没有变化,终于当某次请求距第一次请求大于等于absoluteAuthTimeoutParam,即13:00的时候,就会登陆失效。当然如果在13:00之前,距离上一次登陆时间超过了30分钟,那也过期了。
注意:相对过期时间与绝对过期时间不是必须的。可以都不设置,也可以只设置一个。如果都没有设置,那么登陆是否失效取决于session失效时间,否则取决于session失效时间和相对过期时间与绝对过期时间。
2.2 代码分析
1)在login(IdentityInterface $identity, $du
yii2多模块独立登录,与登录源码分析
最新推荐文章于 2023-06-28 09:11:23 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)