laravel - 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 分钟前点击链接,我想停止计数。
他将重定向到链接,但计数不会增加。
我是新人,所以如果你能详细解释一下,那就太好了。谢谢
解决方案
我会创建一个新表,让我们调用它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 代码中进行一些比较,以检查是否达到时间阈值。
推荐阅读
- pointers - char *const argv[] vs char *argv 和 execv 系统调用
- reactjs - airbnb的日期选择器不显示
- java - 无法将表添加到 Room 数据库 - 日志中的异常显示“预期”表与“找到”不同
- bash - 在 shell 脚本中设置日志文件后打印到屏幕
- c++ - 如何使用 c++ 获取 %systemroot% 或其他的完整路径?
- mongodb - 在嵌入的子文档下插入一个新对象
- ios - 如何让颜色更改对 iOS 的整个应用程序生效?
- html - 剑道网格标题属性格式
- django - 如何使用 GET 方法通过 Django DRF API 调用获取保存在 POST 方法中的数据?
- laravel - 在 laravel 5.8 中作曲家更新时会发生此错误