Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:检查两个用户是否同时登录_Php_Laravel_Authentication - Fatal编程技术网

Php Laravel:检查两个用户是否同时登录

Php Laravel:检查两个用户是否同时登录,php,laravel,authentication,Php,Laravel,Authentication,我想通过检查企业所有者和最终客户是否都是兑换优惠券的人来验证我的应用程序中优惠券的使用。这将是一个过程: 客户显示其二维码 所有者扫描它 优惠券在两者都已登录的情况下进行兑换(当所有者的设备发出post请求并使用耦合控制器时会发生这种情况) 我知道我可以使用auth()来验证所有者的状态(他无论如何在注销时都无法访问“兑换”视图),但是有没有办法在不修改数据库中的用户行的情况下检查客户端是否也已登录?现在,我使用以下方法: <?php namespace App\Http\Co

我想通过检查企业所有者和最终客户是否都是兑换优惠券的人来验证我的应用程序中优惠券的使用。这将是一个过程:

  • 客户显示其二维码
  • 所有者扫描它
  • 优惠券在两者都已登录的情况下进行兑换(当所有者的设备发出
    post
    请求并使用
    耦合控制器
    时会发生这种情况)
我知道我可以使用
auth()
来验证所有者的状态(他无论如何在注销时都无法访问“兑换”视图),但是有没有办法在不修改数据库中的
用户
行的情况下检查客户端是否也已登录?现在,我使用以下方法:

<?php
    namespace App\Http\Controllers\Auth;
    use App\User;
    use App\Http\Controllers\Controller;

    class LoginController extends Controller
    {
      ...

      public function store()
      {
          if( !auth()->attempt(request(['email','password'])) ){
              return back()->withErrors([
                 'message' => 'Please check your credentials and try again.'
              ]);
          }

          $user = User::find(auth()->id());
          $user->active = 1;
          $user->save();

          return redirect()->home();
      }

首先让我们澄清一下PHP脚本是如何工作的,以及它如何影响您了解用户是否在线的路径

在您的Laravel应用程序下,由于PHP如何处理HTTP请求的原因,您只能识别点击(请求),您可以将其解释为心跳。因此,您不能(至少使用裸PHP)一直在线看到用户,但是如果页面最近点击了,您可以假设用户在那里

这就是说,一旦给出页面点击/http请求,您将决定可接受的时间窗口是什么

如果在登录时只记录用户处于活动状态(作为布尔/int标志,如
$user->active=1
),则即使在用户离开应用程序后很长时间,您也会认为该用户处于活动状态,因为用户会话可能完全保持活动状态(打开),但该用户实际上处于非活动状态

有很多方法可以解决这个问题

一种可能的方法是记住用户上次点击你的页面的时间,所以你可以在下一个- 5分钟内考虑他在线(这个值取决于你)。这种方法对于您愿意实现的目标来说是足够公平的。保持这种跟踪可以通过中间件来实现,因此您的控制器保持干净

关于如何准确地实现这一点,好吧,这将是一个完整的、自以为是的git项目,在这里发布,这可能超出了这个答案的范围。长话短说,记得把你认为与用户活动相关的事件的<强>时间戳< /强>记录下来,而不是没有定时信息的标志。


如果您愿意在外部软件包中将其作为可用功能来实现,那么以下是一些选项:

即使你不愿意加入第三方软件包,也可以自由地挖掘他们的来源(从特性开始),以获得一些关于如何解决这个问题的想法

您还将注意到,其中一些应用程序使用缓存来跟踪一次性数据,而无需将其存储到数据库中的业务ERD中


希望这有助于作为一个起点。

或者完全不同的方式:1。客户端应用程序请求一个nonce。2.中央服务发出一个具有短到期窗口的临时通知。3.客户端应用程序在QR数据中包含nonce。[例如:
{“userid”:1,“couponid”:2,“nonce”:3}
]4。所有者应用程序扫描客户端QR,发送到中央服务进行验证。5.请求已验证,nonce将失效以供将来使用。另请参阅