详解Laravel中间件如何统计用户在线时长

发布时间 - 2023-03-31 00:00:00    点击率:

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了laravel中间件怎么实现统计用户在线时长 ,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

Laravel — 了解用户上次在线的时间以及总计在线时长

此处以统计后台用户(admin_users)的在线时长为例;前台用户的话,只是对应的表不一样(对应users)。

准备数据库

此处需要添加两个字段,分别是 上次在线时间 和 总计在线时长(秒为单位):

unsignedInteger('spent')->default('0')->comment('使用时长')->after('id');
            $table->timestamp('onlined_at')->nullable()->comment('最后访问时间')->after('updated_at');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('admin_users', function (Blueprint $table) {
            //
            $table->dropColumn(['spent', 'onlined_at']);
        });
    }
}

创建中间件

id); // 获取上次访问时间戳
            $now = Carbon::now();

            if ($lastSeenAt != null) {
                $duration = $now->diffInSeconds($lastSeenAt); // 计算在线时长(秒数)
                $user->increment('spent', $duration, ['updated_at' => $user->updated_at, 'onlined_at' => $now]); //updated_at 维持原值
            }

            Cache::put($seenKey . $user->id, $now, Carbon::now()->addMinutes(1)); // 保存当前访问时间戳(并设置缓存过期时间为一分钟)
        }

        return $next($request);
    }
}

此处没有用使用 DB facade 来避免更新用户表的{更新时间}字段,而用 increment 函数的第二个参数来维持 updated_at 值不变。

应用中间件

在 \app\Http\Kernel.php 中添加一个 $routeMiddleware

protected $routeMiddleware = [
        //其它
        'admin.spent' => \App\Http\Middleware\CountAdminUserOnlineTime::class,
        //其它
    ];

如果你用的是 dcat-admin 后台框架,可以在 config/admin.php  的 route 配置里直接附加 middleware:

'middleware' => ['web', 'admin'], // 默认值:
'middleware' => ['web', 'admin', 'admin.spent'], //添加在线时长中间件

其它情况: 在路由定义里添加:

Route::middleware([/* 其它中间件*/ , 'admin.spent'])->group(
function () {
    //... 需要统计的路由
});

dcat-admin 在概览页面展示用户时长:

//新建一个 AdminUser 模型继承默认的 Administrator
orderBy('onlined_at', 'DESC')
            ->get(['name', 'onlined_at', 'spent'])
            ->toArray();
        foreach ($data as &$d) {
            if (!$d['spent']) {
                $d['spent'] = '-';
            } else {
                $d['spent'] = formatTime($d['spent']);
            }
            if (Carbon::parse($d['onlined_at'])->diffInMinutes() <= 5) {
                $d['name'] = ' ' . $d['name'];

            } else {
                $d['name'] = ' ' . $d['name'];

            }

        }

        $titles = ['管理员', '最后在线', '总在线时长'];

        return Tab::make()
            ->padding(0)
            ->add('业务信息',
                Callout::make('后台用户(最近登录)')->success() . Table::make($titles, $data)
            );
    }

//公共函数库增加 formatTime
/**

 * 将给定秒数转换为以“x天x时x分钟”形式

 * e.g. 123456 => 1天10时17分钟

 */

function  formatTime($seconds)

{

 $days  =  floor($seconds  /  86400);

 $hours  =  floor(($seconds  %  86400)  /  3600);

 $minutes  =  floor(($seconds  %  3600)  /  60);

 $result  =  "";

 if  ($days  >  0)  {

 $result  .=  "{$days}天";

 }

 if  ($hours  >  0)  {

 $result  .=  "{$hours}时";

 }

 if  ($minutes  >  0)  {

 $result  .=  "{$minutes}分钟";

 }

 return  $result;

}

统计结果示例

                

推荐学习:《laravel视频教程》                            


# laravel  # php  # 中间件  # 数据库  # http  # 时长  # 的是  # 更新时间  # 感兴趣  # 带来了  # 第二个  # 给大家  # 时间为  # 为例  # 你用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  大连 网站制作,大连天途有线官网?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何在Tomcat中配置并部署网站项目?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Swift中switch语句区间和元组模式匹配  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何选择可靠的免备案建站服务器?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  js代码实现下拉菜单【推荐】  北京专业网站制作设计师招聘,北京白云观官方网站?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel如何为API生成Swagger或OpenAPI文档  Android 常见的图片加载框架详细介绍  中国移动官方网站首页入口 中国移动官网网页登录  Android自定义控件实现温度旋转按钮效果  如何正确下载安装西数主机建站助手?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何创建自定义Facades?(详细步骤)  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  如何在宝塔面板中修改默认建站目录?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  如何用美橙互联一键搭建多站合一网站?  如何在宝塔面板创建新站点?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  C语言设计一个闪闪的圣诞树  Internet Explorer官网直接进入 IE浏览器在线体验版网址  java获取注册ip实例  移动端脚本框架Hammer.js  详解Huffman编码算法之Java实现  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Android仿QQ列表左滑删除操作  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  网站建设要注意的标准 促进网站用户好感度!  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  5种Android数据存储方式汇总  简历在线制作网站免费版,如何创建个人简历?  公司网站制作价格怎么算,公司办个官网需要多少钱?  进行网站优化必须要坚持的四大原则  敲碗10年!Mac系列传将迎来「触控与联网」双革新  如何自定义建站之星模板颜色并下载新样式?  想要更高端的建设网站,这些原则一定要坚持!  高防服务器租用首荐平台,企业级优惠套餐快速部署  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?