Yii2 配置问题:关闭浏览器不注销,10小时后自动注销
解决方案
要实现关闭浏览器不注销,但10小时后自动注销,需要结合enableAutoLogin的Cookie持久化特性,同时精准控制登录有效期,调整配置和登录逻辑如下:
1. 修改User组件配置
开启enableAutoLogin,并配置自动登录Cookie的有效期为10小时(36000秒),同时保留absoluteAuthTimeout兜底:
'user' => [ 'class' => \common\models\WebUser::class, 'identityClass' => 'common\models\User', 'enableAutoLogin' => true, // 开启自动登录,关闭浏览器后Cookie保留 'absoluteAuthTimeout' => 36000, // 兜底:无论活跃与否,10小时后强制注销 'enableSession' => true, // 配置自动登录Cookie的有效期 'autoLoginCookie' => [ 'name' => '_identity', 'expire' => 36000, // Cookie有效期10小时,和absoluteAuthTimeout保持一致 'httpOnly' => true, 'secure' => YII_ENV_PROD, // 生产环境开启HTTPS时设为true ], ],
2. 调整Session配置
Session的timeout保持10小时即可,确保Session使用Cookie存储,但不要给Session Cookie设置过期时间(保持会话级):
'session' => [ 'class' => 'yii\web\Session', 'timeout' => 36000, // Session有效期10小时 'useCookies' => true, 'cookieParams' => [ 'httpOnly' => true, 'secure' => YII_ENV_PROD, // 不设置expire,保持会话级Cookie,由AutoLogin的Cookie负责持久化 ], ],
3. 登录时指定有效期
在调用Yii::$app->user->login()方法时,必须传入duration参数为36000秒,否则自动登录Cookie会使用默认有效期(通常30天):
// 示例登录代码 $user = User::findByUsername($username); if ($user && $user->validatePassword($password)) { // 第三个参数为自动登录有效期,设为10小时 Yii::$app->user->login($user, 36000); return $this->goHome(); }
原理说明
enableAutoLogin开启后,系统生成持久化Cookie存储用户身份信息,关闭浏览器不会清除该Cookie,实现“关闭浏览器不注销”。autoLoginCookie['expire']和登录时的duration共同控制Cookie有效期,到期后自动失效,用户需重新登录。absoluteAuthTimeout作为兜底机制,确保即使用户10小时内持续活跃,也会被强制注销,完全匹配需求。
内容的提问来源于stack exchange,提问作者AKAust
相关产品推荐
相关产品推荐

