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

Laravel 8中记录用户最后交互时间:全请求更新还是仅登录时更新?

两种更新策略的分析与实现方案

1. 每次请求更新:数据精准,需控制性能开销

如果需要精准记录用户每一次活跃的时间,每次请求更新是合理的,但要避免不必要的数据库写入:

  • 避免频繁重复更新:可以设置时间阈值,比如仅当当前时间与last_interaction的间隔超过5分钟(可按需调整)时才执行更新,减少数据库操作次数。
  • 实现方式:创建一个UpdateLastInteraction中间件:
<?php

namespace App\Http\Middleware;

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

class UpdateLastInteraction
{
    public function handle(Request $request, Closure $next)
    {
        if (Auth::check()) {
            $user = Auth::user();
            // 设置5分钟更新间隔,可根据需求调整时长
            if (now()->diffInMinutes($user->last_interaction) >= 5) {
                $user->update(['last_interaction' => now()]);
            }
        }

        return $next($request);
    }
}

在app/Http/Kernel.php中将该中间件注册到web(或api)中间件组,所有登录用户的请求都会触发逻辑。

2. 仅登录时更新:性能最优,数据精度有限

如果对用户活跃时间的精度要求不高,仅需记录用户最近一次登录的时间,这种方案完全足够:

  • 实现方式:在LoginController的authenticated方法中添加更新逻辑:
protected function authenticated(Request $request, $user)
{
    $user->update(['last_interaction' => now()]);
}

这种方式几乎无性能开销,因为登录操作的频率远低于日常请求。

策略选择建议

  • 若需分析用户实时活跃情况(比如统计在线用户、用户停留时长),选择带阈值的每次请求更新方案;
  • 若仅需记录用户最近一次访问的大致时间,选择仅登录时更新的方案。

内容的提问来源于stack exchange,提问作者Mohammed Bensouna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:15:33