Laravel 中使用简单的方法跟踪用户是否在线(推荐)


Posted in PHP onOctober 30, 2019

今天,我的任务是,在Laravel应用程序用户个人资料页面上,用户名旁边添加一个绿点,表示他们是否在线。我首先想到的是,我们将需要启动一个node.js服务器并跟踪每个用户的活动套接字连接。然后用当前登录的用户套接字,我们可以实时更新在线状态!唯一的问题是,这是我们目前的要求,有点超过顶部,并没有完全必要的,直到我们的功能,需要达到第二个准确性,如实时聊天。

一位同事指出,对于目前的需求,MySpace用来处理“在线”功能的方式可能就足够了。就我们所知,MySpace用来显示用户是否在线的方式是基于他们在网站上的最后一项活动。如果他们的最后一次活动在X分钟内,我们会显示“在线”徽章,如果没有,我们不会。简单!

让我们为用户的上次活动在用户表中添加一个字段,并且在请求每个页面时更新它。然后当我们需要检查用户是否在线,我们可以将该时间戳与当前时间戳进行比较,如果在X分钟内,则他们在线!虽然这可以工作得很好,这取决于你正在构建的应用程序,它会向数据库添加不必要的 写入 ,这会在某种程度上降低你应用程序的速度。一个好的折衷办法是将这些信息存储在应用程序缓存中。 缓存的好处是可以简化这种方法,因为可以设置缓存为过期。

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

  1. 创建一个 BaseController,让你所有的 Controller 都继承它
  2. 创建一个中间件

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

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

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

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 中使用简单的方法跟踪用户是否在线,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
PHP 文件系统详解
Sep 13 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
PHP封装的分页类与简单用法示例
Feb 25 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 #PHP
php上传后台无法收到数据解决方法
Oct 28 #PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 #PHP
PHP接入微信H5支付的方法示例
Oct 28 #PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 #PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 #PHP
layui数据表格自定义每页条数limit设置
Oct 26 #PHP
You might like
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
php实现购物车功能(上)
2020/07/23 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
javascript+mapbar实现地图定位
2010/04/09 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
Python无损压缩图片的示例代码
2020/08/06 Python
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
高职教师岗位职责
2013/12/24 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
失恋33天观后感
2015/06/11 职场文书
干部理论学习心得体会
2016/01/21 职场文书
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL