You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:50:40