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 sprintf()函数让你的sql操作更安全
Jul 23 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
php 中的信号处理操作实例详解
Mar 04 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
Webkit的跨域安全问题说明
2011/09/13 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
node.js通过url读取文件
2020/10/16 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
关于Python作用域自学总结
2019/06/10 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Django 框架模型操作入门教程
2019/11/05 Python
np.random.seed() 的使用详解
2020/01/14 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python的collections模块真的很好用
2021/03/01 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
华为慧通笔试题
2016/04/22 面试题
经典的班主任推荐信
2013/10/28 职场文书
技术副厂长岗位职责
2013/12/26 职场文书
先进典型事迹材料
2014/12/29 职场文书
企业承诺书格式范文
2015/04/28 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS