일반적인 처리 폼 중복 제출 방식

2297 단어
폼 중복 제출은 웹 개발에서 자주 발생하는 문제로 말 그대로 사용자가 의도적이거나 무의식적으로 같은 폼에 대해 두 번(여러 번) 제출했고 가벼우면 시스템 데이터가 중복되고 심하면 시스템 업무 논리적 이상을 초래하여 시스템 데이터가 혼란스러워지는 것을 말한다.한편으로는 데이터베이스에 대량의 중복되고 무의미한 데이터를 삽입하여 서버의 자원을 점용하고, 다른 한편으로는 요청 서버가 요청이 중복된 요청인지 확인하지 않아 악의적인 공격을 초래할 수 있다.1. 양식의 반복 제출을 일으키는 흔한 장면은 다음과 같다.
  • 제출 버튼을 반복 클릭합니다.악의적인 연속 클릭 제출 단추를 포함하거나 네트워크가 느리고 서버 처리 속도가 느려서 사용자가 여러 번 클릭하는 것을 포함한다
  • 양식 제출 처리가 끝난 후 브라우저의 뒤로 단추를 통해 원래 페이지로 돌아가서 제출 단추를 다시 누르십시오..
  • 브라우저의 새로 고침 단추를 누르면 폼이 중복 제출됩니다..
  • 브라우저의 기록을 통해 양식이 제출한 URL 주소를 가져와 다시 액세스합니다..

  • 2. 해결 방법
    1. 다른 페이지로 전송하지 않고 방향을 바꾸는 방식으로 목표 페이지로 이동
    2. JS 스크립트 방식
    JS 스크립트 방식은 장면 1의 여러 번의 클릭만 제한할 수 있고 서버 방식과 결합하여 사용해야 한다.JS 제한에는 다음과 같은 몇 가지 방법이 있습니다. (1) 전역 변수를 정의하고form 제출 전에 제출한 적이 있는지 판단합니다.
    
            var checkSubmitFlg = false;
            function checkSubmit() {
                if (checkSubmitFlg == true) {
                    return false;
                }
                checkSubmitFlg = true;
                return true;
            }
            document.ondblclick = function docondblclick() {
                window.event.returnValue = false;
            }
            document.onclick = function doconclick() {
                if (checkSubmitFlg) {
                    window.event.returnValue = false;
                }
            }
    
    
        

    (2) 제출 단추를 누르면 바로 수정 단추를 사용하지 않습니다 (3) 제출 단추를 누르면 차단층이 튀어나와 사용자가 두 번 클릭하지 않도록 합니다
    3. 서비스 측 방식
    페이지를 열 때 token을 생성하여 세션에 저장하고 페이지의form에 숨겨진 영역을 설정합니다. 폼을 제출할 때 백엔드에서 세션에 이 token이 있는지 확인하고, 존재하면 세션에서remove를 제거한 다음 정상적인 업무 논리 작업을 진행합니다. (예를 들어 업무 논리 작업이 실패하면 이 token을 세션에 추가하여 사용자가 데이터를 수정한 후에 제출하는 데 편리합니다.)이 token이 없으면 중복 제출 알림을 되돌려줍니다.서비스 측 방식은 폼 중복 제출을 방지하면 대부분의 폼 중복 제출 문제를 해결할 수 있지만 일부 결함도 존재한다.예를 들어 같은 표를 신속하게 중복 제출하는 경우 한 개의 요청만 정상적으로 처리된다는 것을 정확하게 보장할 수 없다.세션에 token을 저장하는 것은 하나의 폼만 사용할 수 있습니다. 만약에 사용자가 같은 세션에서 여러 개의form 폼을 동시에 열면 마지막으로 열린form 페이지만 정확하게 처리할 수 있습니다. (데이터베이스에 저장된 token이remove를 대체하는 방식은 사용할 수 있지만 이 방식은 비교적 좋지 않기 때문에 추천하지 않습니다.)
    4. 고유 구속
    데이터베이스에 유일성 제약 제한을 추가하는 것이 폼의 중복 제출을 방지하는 가장 효과적인 방법이다.
    3. 일반적인 상황에서 JS 스크립트 방식과 서버 방식 두 가지를 결합하면 표의 중복 제출을 방지할 수 있고 특수한 업무 요구에 대한 데이터베이스 유일성 제약 제한 등 방식으로 업무 논리상의 데이터 유일성을 강제적으로 확보할 수 있다.

    좋은 웹페이지 즐겨찾기