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

Laravel中如何按用户类型动态修改当前会话超时时间?

实现Laravel按用户组动态设置会话超时

1. 登录时初始化会话过期时间

在登录成功后,根据用户角色(管理员/普通用户)设置对应会话的过期时间,可在LoginController的authenticated方法中处理:

protected function authenticated(Request $request, $user)
{
    // 根据用户角色设置超时分钟数
    $timeoutMinutes = $user->is_admin ? 30 : 60;
    // 将过期时间戳存入当前会话
    request()->session()->put('expires_at', now()->addMinutes($timeoutMinutes)->timestamp);
}

2. 自定义中间件验证会话过期

创建自定义中间件替代默认的全局会话超时校验:
首先生成中间件:

php artisan make:middleware CheckSessionTimeout

然后在中间件中编写校验逻辑:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class CheckSessionTimeout
{
    public function handle(Request $request, Closure $next)
    {
        if (Auth::check()) {
            $expiresAt = session('expires_at');
            
            // 若未设置过期时间, fallback到全局配置
            if (!$expiresAt) {
                $globalTimeout = config('session.lifetime');
                $expiresAt = now()->addMinutes($globalTimeout)->timestamp;
                session()->put('expires_at', $expiresAt);
            }

            // 校验是否超时
            if (now()->timestamp > $expiresAt) {
                Auth::logout();
                return redirect()->route('login')->with('error', '会话已超时,请重新登录');
            }

            // 可选:每次请求刷新过期时间(保持活跃时自动延长)
            $timeoutMinutes = Auth::user()->is_admin ? 30 : 60;
            session()->put('expires_at', now()->addMinutes($timeoutMinutes)->timestamp);
        }

        return $next($request);
    }
}

3. 注册中间件

在app/Http/Kernel.php的web中间件组中添加自定义中间件:

protected $middlewareGroups = [
    'web' => [
        // ...其他已存在的中间件
        \App\Http\Middleware\CheckSessionTimeout::class,
    ],
];

4. 注意事项

  • 全局session.lifetime配置需设为不小于最大超时值(比如60分钟),避免全局超时提前触发自定义校验逻辑。
  • 无论使用文件、数据库还是Redis存储会话,该方案均有效,核心是通过会话存储自定义过期时间并由中间件校验。
  • 若不需要活跃时延长会话,可移除中间件中刷新过期时间的代码,保持登录时设置的固定超时。

内容的提问来源于stack exchange,提问作者Michael D. Kirkpatrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:12:03