<?php
namespace App\Http\Middleware;
use App\Exceptions\InvalidRequestException;
use Closure;
use Illuminate\Support\Facades\Redis;
class PreventDupSubmit
{
/**
* 简单的防止前端重复提交数据 导致的数据异常
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$requestParams=$request->all();
$requestParams["adminId"]=getAdminUserId();
$requestParams["uri"]=$request->getUri();
ksort($requestParams);
$key=md5(serialize($requestParams));
$result=Redis::Connection("wms")->set('wms_' . $key, 1,"EX",5,"NX");
if(!$result){
throw new InvalidRequestException("请勿重复请求,请5秒后再发起请求");
}
$response=$next($request);
Redis::Connection("wms")->del('wms_' . $key);
return $response;
}
}
用:
单大师推荐搜索Q&A功能更新微信
Q
如何避免反馈提交数据,防止重复数据?
A
可以通过限制提交次数、匿名访问唯一性、字段不许重复来实现。
01. 限制提交次数
点击表单设置>>基础设置>>填写控制设置,可以通过微信ID、IP地址和同一设备来控制。
02. 匿名访问唯一
当上诉填写控制设置了每个微信账号只能提交一次,且在微信或者小程序中填写表单,则提交数据后将无法再次进入表单,即尽可访问提交一次。
? 点击体验 ?
https://biaodan100.com/web/formview/5ece02a1fc918f7ce713502e
03. 字段不许重复
● 单字段不许重复
表单编辑>>选中字段>>字段属性设置,可以通过比如姓名、手机号、证件号等字段的不许重复属性设置来控制。
Tips:单行文本、多行文本、日期、时间、姓名、电话、电子邮箱、证件号/卡号、网址字段均支持设置字段属性为不许重复。
● 多字段联合不许重复
表单编辑>>选中表单名称>>表单属性设置,设置多字段联合不许重复来控制。只有满足多个字段都唯一,才可提交表单。比如周报、每月收支账单等,需要实现日期+姓名唯一,或者月份+店铺名唯一等场景。
Tips:多字段联合不许重复属于高级功能,需单独开通
左右滑动查看更多
更多问题咨询,直接给公众号发消息,会有在线客服解答哦~~~
不要惊讶,是真人!
VC开发有一个基础原则:*.jsp不可以直接访问*.jsp文件。而所有的jsp必须先经过Servlet之后再跳转到另外一个jsp页面上。
1.运行Token.java,会跳转到input.jsp。此时sesssion增加属性input_token存在
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class InputServlet
*/
@WebServlet(name="tokenServlet",urlPatterns={"/TokenServlet"})
public class Token extends HttpServlet {
private static final long serialVersionUID=1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("input_token", new Date());
request.getRequestDispatcher("/input.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
2.input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Input</title>
</head>
<body>
<form action="InputServlet" method="post">
输入信息:<input type="text" name="msg" id="msg">
<input type="submit" value="输入">
</form>
</body>
</html>
3.在input.jsp输入***后,提交,会跳转到http://localhost/AWProject/InputServlet,同时控制台显示“表单提交:***”。此时session的input_token属性被删除。
*请认真填写需求信息,我们会在24小时内与您取得联系。