本篇文章给大家带来了关于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 值不变。
应用中间件
美间AI
美间AI:让设计更简单
45 查看详情
在 appHttpKernel.php 中添加一个 $routeMiddleware
protected $routeMiddleware = [ //其它 'admin.spent' => AppHttpMiddlewareCountAdminUserOnlineTime::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 模型继承默认的 AdministratororderBy('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中间件如何统计用户在线时长的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/338200.html
微信扫一扫
支付宝扫一扫