如何在 Laravel 中统计用户的最后在线时间

Laravel — 了解用户上次在线的时间

本文是我在重构 Pulse 的代码库时记录下的见解,变更和反思系列文章的一部分。Pulse 是一个为开发人员设计的无痛且经济实惠的站点和服务器监控工具。

今天,我将讨论我是如何添加中间件功能来记录用户上次在线 / 使用该应用程序的时间。我想将其添加到 Pulse 中,以解决一些我需要回答的分析性问题。

准备数据库

如果我们要记录用户上次的在线时间,则需要为此在 users 表中添加时间戳。这是一个简单的步骤,因此我们将从此开始。将以下内容插入到用户表迁移中:

$table->timestamp("last_online_at")->useCurrent();

接下来,我们希望 Laravel 将此属性识别为 Carbon 实例,以便我们可以利用其大量的日期和时间功能集。因此,在 User 模型类中,我们将其添加到 $casts 数组中:

class User
{
    protected $casts = ["last_online_at" => "datetime"];
}

为应用添加逻辑

由于我们希望能够从应用程序的任何潜在入口点设置 / 更新此值,所以存储逻辑的理想位置是在中间件类中。因此,让我们继续创建一个:

namespace App\Http\Middleware;

use DB;
use Closure;

class LastOnlineAt
{
    public function handle($request, Closure $next)
    {
        if (auth()->guest()) {
            return $next($request);
        }

        if (auth()->user()->last_online_at->diffInHours(now()) !== 0)
        { 
            DB::table("users")
              ->where("id", auth()->user()->id)
              ->update(["last_online_at" => now()]);
        }

        return $next($request);
    }
}

这里发生了相当多的事情,所以让我们将其分解为…

1. 首先检查用户是否为访客。如果是,我们将继续,因为我们无法为访客用户设置时间戳。

2. 如果用户经过身份验证,我们将检索他们上次在线的时间戳。

3. 接下来,我们确定此时间戳是否超过一小时 (这是我添加的检查,以避免在每次请求时更新数据库,但您可以将此检查设置为您想要的任何内容,或完全删除它)。

4. 假设时差超过一小时,我们将使用当前时间更新数据库中的时间戳。

5. 无论是否执行了第 4 步,我们都将继续处理用户的请求 (无论请求如何)。

您可能想知道为什么我不是直接更新经过身份验证的用户,而是使用 DB facade?

好吧,如果我们更新模型本身,这将导致它触发事件,并且还将 update_at 时间戳也设置为当前时间。从技术上讲,用户记录实际上并没有得到更新,我们只是设置了他们的最后上线时间。因此,我认为使用 DB facade 是更好的选择。

 

最后一步

所剩下的就是我们指示 Laravel 使用这个中间件。我们在应用程序的 HTTP kernel 中实现它。只需将类添加到

$MiddlewareGroups 属性内的 web 和 api 数组,例如:

protected $middlewareGroups = [
    "web" => [LastOnlineAt::class],
    "api" => [LastOnlineAt::class],
];

现在,只要通过身份验证的用户访问 web 或 api 路由,Laravel 都会设置其 last_online_at 时间戳。干净利落!

我的官方群点击此处加入群聊【PHP/web/高级学习交流群】,一起学习,相互讨论。

群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取

这套精品PHP教程绝不是市场上的那些妖艳贱货可比,作为web开发的佼佼者PHP并不逊色其他语言,加上Swoole后更加是如虎添翼!进军通信 、物联网行业开发百度地图、百度订单中心、虎牙、战旗TV等!寒冬裁员期过后正是各大企业扩大招人的时期,现在市场初级程序员泛滥,进阶中高级程序员绝对是各大企业急需的人才,这套学习教程适合那些1-5年以内的PHP开发者正处于瓶颈期,想要突破自己进阶中高级、架构师!名额有限,先到先得!

原文:PHP 结合 MySQL 千万级数据处理

腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)​

部分资料截图:

 

 

 

 

还有限时精品福利:

★腾讯高级PHP工程师笔试题目

★亿级PV高并发场景订单的处理

★laravel开发天猫商城组件服务

★战旗TV视频直播的架构项目实战

扫描下面二维码领取

 

https://qm.qq.com/cgi-bin/qm/qr?k=tnc-MbbNXPn5psmmPtjh0VPlxH-g4Mtq&authKey=xT5SnnVXhzkkXIIgP0E2YmSexJDtvy0jiVMlSjIb8TbChYuG98yysUeas7jWUy/S&noverify=0 (二维码自动识别)

 

对PHP后端技术,对PHP架构技术感兴趣的朋友,我的官方群点击此处,一起学习,相互讨论。

群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。

本课程深度对标腾讯T3-T4标准,贴身打造学习计划为web开发人员进阶中高级、架构师提升技术,为自己增值涨薪!加入BAT特训营还可以获得内推大厂名额以及GO语言学习权限!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值