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实现首页链接查询 友情链接检查的代码
Jan 05 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
WordPress开发中的get_post_custom()函数使用解析
Jan 04 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 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默认安装产生系统漏洞
2006/10/09 PHP
用Flash图形化数据(一)
2006/10/09 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
jquery插件开发之实现md5插件
2014/03/17 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python实现分段线性插值
2018/12/17 Python
python实现贪吃蛇小游戏
2020/03/21 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
Django实现文件上传和下载功能
2019/10/06 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
关于Assembly命名空间的三个面试题
2015/07/23 面试题
AJAX的优缺点都有什么
2015/08/18 面试题
德尔福集团DELPHI的笔试题
2012/02/22 面试题
中学生社会实践活动总结
2014/07/03 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
大二学年个人总结
2015/03/03 职场文书
超市主管竞聘书
2015/09/15 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang