首页 > 解决方案 > Laravel 8 - 计算点击次数但用户不能向该功能发送垃圾邮件

问题描述

在我的网站中,我跟踪特定链接的点击次数,并使用此功能保存数据库中的计数:

public function redirect($url)
{
  $data = Class::where('url', $url)->first('clicks');
  $cnt = $data->clicks;
  $cnt++;
  $sql = Class::where('url', $url)->update([
      'clicks' => $cnt,
  ]);
  if (!$sql) {
    abort(500);
  }
  return redirect('https://website.com/'.$url);
}

问题是如果有人向链接发送垃圾邮件,计数就会增加。如果用户在 5 分钟前点击链接,我想停止计数。

他将重定向到链接,但计数不会增加。

我是新人,所以如果你能详细解释一下,那就太好了。谢谢

标签: laravel

解决方案


我会创建一个新表,让我们调用它link_clicks。您将需要 3 列,一列用于识别人员,一列用于获取时间,一列用于识别链接(我不完全知道您如何存储要观察的链接)。所以或多或少你会得到下表:

链接点击次数

  • 用户身份
  • 链接ID
  • created_at

如果用户总是登录,我会存储 user_id,如果他们没有登录,我会存储 IP 地址。因此,不要使用 user_id,而是创建一个名为 ip 或 ip-address 的列。

之后,您可以轻松获得最后一次点击及其时间。

- 例子

您的新表包含以下条目:user_id = 1、link_id = 1 和 created_at = 2021-04-21 19:00:00

现在在您的控制器中,您将获得当前的 date_timedate("Y-m-d H:i:s")和用户 ID,如下所示:auth()->id()。您还可以以分钟为单位定义您的时间阈值,例如max_dif = 5

之后,您可以查询该表以获取用户的所有点击。您可以在 where() 语句中进行时间比较,也可以在 php 代码中进行一些比较,以检查是否达到时间阈值。


推荐阅读