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实现分页的一个示例
Oct 09 PHP
用php来检测proxy
Oct 09 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
php中去除所有js,html,css代码
Oct 12 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
php PDO异常处理详解
Nov 20 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
php use和include区别总结
Oct 13 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
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
使用python实现BLAST
2018/02/12 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
党员政治学习材料
2014/05/14 职场文书
青奥会口号
2014/06/12 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript