由于多次提交表单,我遇到了一些问题。 我正在使用laravel作为框架并创建一个浏览器游戏(我知道,有数百万)只是为了好玩。
我有一个带有“Construct”按钮的建筑物的页面,其形式为(method =“post”)。
如果我按住Enter键4-5秒,将触发许多请求,用户可以在数据库中创建许多记录。
我不希望只有客户端修复
$(document).on('submit', 'form', function() {
$(this).find('button:submit, input:submit').attr('disabled', 'disabled);
});
因为从不信任客户。
有人在这里有解决方案(可能有laravel)吗?
提前致谢。
最好的问候。
答案 0 :(得分:0)
您可以使用csrf令牌在服务器端控制它。您的表单将具有用于防止跨站点请求伪造的令牌,您可以在控制器中访问此令牌以唯一地标识客户端。当请求到达控制器时,您可以检查客户端是否第一次发送请求。如果不是第一次你可以返回。 例如: -
public function construct(Request $request){
$token = $request->_token;
//check weather the token already exists or not, using db or session
if(exists){
return;
}
}
答案 1 :(得分:0)
"生成随机令牌。将令牌放入会话中。将表单中的标记作为隐藏字段。提交时,如果收到的令牌等于会话中的令牌,请执行数据库中的所有内容并从会话中删除令牌。"
"将中间件用于路由组(laravel.com/docs/5.6/routing#route-group-middleware),您可以查看:: share(laravel.com/docs/5.6/views#sharing-data- with-all-views)随机令牌并保存在会话中。"
谢谢@assistbss