Laravel实现跟踪用户是否在线功能

发布时间 - 2020-01-30 00:00:00    点击率:

 

laravel 中使用简单的方法跟踪用户是否在线

今天,我的任务是,在 Laravel 应用程序用户个人资料页面上,用户名旁边添加一个绿点,表示他们是否在线。

我首先想到的是,我们将需要启动一个 node.js 服务器并跟踪每个用户的活动套接字连接。然后用当前登录的用户套接字,我们可以实时更新在线状态!

唯一的问题是,这是我们目前的要求,有点超过顶部,并没有完全必要的,直到我们的功能,需要达到第二个准确性,如实时聊天。

一位同事指出,对于目前的需求,MySpace 用来处理 “在线” 功能的方式可能就足够了。就我们所知,MySpace 用来显示用户是否在线的方式是基于他们在网站上的最后一项活动。

如果他们的最后一次活动在 X 分钟内,我们会显示 “在线” 徽章,如果没有,我们不会。简单!

让我们为用户的上次活动在用户表中添加一个字段,并且在请求每个页面时更新它。然后当我们需要检查用户是否在线,我们可以将该时间戳与当前时间戳进行比较,如果在 X 分钟内,则他们在线!

虽然这可以工作得很好,这取决于你正在构建的应用程序,它会向数据库添加不必要的 写入,这会在某种程度上降低你应用程序的速度。

一个好的折衷办法是将这些信息存储在应用程序缓存中。 缓存的好处是可以简化这种方法,因为可以设置缓存为过期。

现在我们决定使用缓存实现这个特性,下一个问题是这个代码应该在哪里运行,以便它在每个请求上运行?我有两个想法可以实现:

创建一个 BaseController,让你所有的 Controller 都继承它

创建一个中间件

经过一些思考,并意识到我需要在所有已经编写的构造函数中添加对父构造函数的调用,我选择在中间件中实现。

我们有个计划,让我们进入代码!

首先,我们需要创建一个中间件。在终端中输入以下命令:

php artisan make:middleware LogLastUserActivity

接下来我们打开以下 php 文件

app/Http/Middleware/LogLastUserActivity.php.

在其中的 handle 方法中添加下面的代码:

 if(Auth::check()) {
$expiresAt = Carbon::now()->addMinutes(5);
 Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
 }

 

接下来,我们打开 app/Http/Kernel.php 文件。如果您使用的是 Laravel 5.1 或 更早的版本, 您应该把代码直接放置到 $middleware 数组中。 如果您的版本是 5.2.* , 您应该把代码放置到 $middlewareGroups 的 web 中 。

注意,一定要把代码放到 StartSession 中间件的下方,否则 Auth 门面将不会正确在 user 中记录 log。我的更新配置设置如下:

protected $middlewareGroups = [
  'web' => [
  \App\Http\Middleware\EncryptCookies::class,
  \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
  \Illuminate\Session\Middleware\StartSession::class,
  \Illuminate\View\Middleware\ShareErrorsFromSession::class
  \App\Http\Middleware\VerifyCsrfToken::class,
  \App\Http\Middleware\LogLastUserActivity::class,
  ],
 'api' => [
 'throttle:60,1',
 ],
 ];

 

最后一步是添加一个方法到我们的 user 对象中去检测这个值。

在 app/User.php 我们添加下面的方法:

public function isOnline()
{
return Cache::has('user-is-online-' . $this->id);
}

现在在任何页面中你就能添加下面的方法:

 @if($user->isOnline())
 user is online!!
 @endif

 

重要提示 -- 确保在你的文件顶部使用 use 引入所有的 facades!

我希望上面这些能帮助到你们解决这个问题!

更多laravel框架相关技术文章,请访问laravel教程栏目!


# laravel  # 应用程序  # 的是  # 创建一个  # 让我们  # 我们可以  # 问题是  # 这是  # 您的  # 他们的  # 如果您 


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


相关推荐: 百度浏览器如何管理插件 百度浏览器插件管理方法  如何在橙子建站中快速调整背景颜色?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  详解jQuery停止动画——stop()方法的使用  JavaScript如何实现路由_前端路由原理是什么  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  如何在阿里云域名上完成建站全流程?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Python进程池调度策略_任务分发说明【指导】  Laravel如何记录自定义日志?(Log频道配置)  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何为API编写文档_Laravel API文档生成与维护方法  html如何与html链接_实现多个HTML页面互相链接【互相】  🚀拖拽式CMS建站能否实现高效与个性化并存?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  ,在苏州找工作,上哪个网站比较好?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  javascript中的try catch异常捕获机制用法分析  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何生成腾讯云建站专用兑换码?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  JavaScript数据类型有哪些_如何准确判断一个变量的类型  Laravel如何配置Horizon来管理队列?(安装和使用)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  如何构建满足综合性能需求的优质建站方案?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何在香港免费服务器上快速搭建网站?  免费视频制作网站,更新又快又好的免费电影网站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  JavaScript如何实现倒计时_时间函数如何精确控制  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  如何用PHP工具快速搭建高效网站?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Android GridView 滑动条设置一直显示状态(推荐)  如何在橙子建站上传落地页?操作指南详解  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何在云主机上快速搭建多站点网站?  php结合redis实现高并发下的抢购、秒杀功能的实例