<?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小時內與您取得聯系。