我想为我的网站创建一个强大的服务器端验证。特别是为了防止单个用户多次评论帖子。或者阻止多次向数据库提交单个数据。 为此,我认为如果单个用户在最后一次交互后被阻止10秒与数据库交互会更好。
1>有没有其他方法可以防止服务器端出现此错误或垃圾邮件?
2 - ;是否可以存储发布时间并通过匹配当前时间和数据库上的时间来检查下一个交互可用性还是有另一种方式?
提前感谢您帮助我进行这项微小的研究!
答案 0 :(得分:0)
使用Eloquent事件,如果应该停止用户,则返回false。
Comment::creating(function()
{
// Check if the user has posted another comment within the last 10 seconds
// e.g.:
if (Comment::where('user_id', $userId)->where('created_at', '>=', Carbon::now()->subSeconds(10))->count()) return false;
});
答案 1 :(得分:0)
特别是为了防止单个用户多次评论帖子。或者阻止多次向数据库提交单个数据
在数据库层强制执行这一点很简单(假设您使用的是关系数据库)。你可以在PHP中构造控制它的逻辑 - 但它很复杂且没必要。
或来自服务器端的垃圾邮件保护?
是的,当然您可以验证服务器端的数据 - 但是您需要更加具体地了解您要实现的目标。有许多工具,如Spamassassin和Akismet,它们非常复杂,经过良好测试,易于集成到PHP中。
答案 2 :(得分:0)
我想为我的网站创建一个强大的服务器端验证。 特别是为了防止单个用户多次评论帖子。
数据库端的一般术语是约束。如果要将每个用户限制为每个帖子一个评论,您可以使用主键约束或唯一约束。例如,如果您有一个名为" comments"的表,那么该表可能包含
用户表的外键约束(因为每条评论来自特定用户)。
Table: comments
post_id user_id
--
1 1
1 2
1 3
2 7
使用primary key (post_id, user_id)
或unique (post_id, user_id)
强制执行该约束。
或者阻止多次向数据库提交单个数据。
我可以想象这个要求有几个不同的含义。您可能想要编辑您的问题,并添加更多详细信息。
为此,我认为如果单个用户在最后一次交互后被阻止10秒与数据库进行交互会更好。
这两个"要求"意思是完全不同的东西。
这可以通过后端的触发器或前端的应用程序代码来完成。 SQL数据库管理系统通常不支持行之间或表之间的声明性约束。