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

  介绍

小编给大家分享一下Laravel实现跟踪用户是否在线功能的方法,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

<强>

<强> Laravel中使用简单的方法跟踪用户是否在线

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

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

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

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

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

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

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

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

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

创建一个BaseController,让你所有的控制器都继承它

<强>创建一个中间件

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

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

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

php  artisan : middleware  LogLastUserActivity

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

应用程序/Http/中间件/LogLastUserActivity.php。

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

,如果(身份验证:检查()),{   时间=美元expiresAt 碳::现在()→addMinutes (5);   ,缓存::把(& # 39;user-is-online & # 39;,只认证::用户()→id,,真的,,expiresAt美元);   以前,}

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

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

protected  middlewareGroups 美元;=,(   & # 39;才能web # 39;,=祝辞,(   ,,中间件\ App \ Http \ \ EncryptCookies::类,   \才能照亮\饼干\中间件\ AddQueuedCookiesToResponse::类,   \才能照亮\会议\中间件\ StartSession::类,   \才能照亮\ \中间件\ ShareErrorsFromSession::类   ,,中间件\ App \ Http \ \ VerifyCsrfToken::类,   ,,中间件\ App \ Http \ \ LogLastUserActivity::类,   ,,,   ,& # 39;api # 39;,=祝辞,(   ,& # 39;节流:60,1 & # 39;   ,),   以前,];

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

在app/用户。php我们添加下面的方法:

public  function  isOnline ()   {   return 缓存::(& # 39;user-is-online & # 39;,只这→美元id);   }

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

,@ if ($ user→isOnline ())   ,user  is 在线! !   以前,@endif

重要提示,确保在你的文件顶部使用使用引入所有的门面!

看完了这篇文章,相信你对“Laravel实现跟踪用户是否在线功能的方法”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

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