중복 양식 제출은 다중 사용자 웹 애플리케이션에서 가장 흔히 발생하는 문제이며 많은 문제를 야기합니다. 다음과 같이 중복 제출 문제가 발생하는 신청 시나리오가 많이 있습니다.
제출 버튼을 두 번 클릭하세요. 새로 고침 버튼을 클릭하세요. 브라우저 뒤로 버튼을 사용하여 이전 작업을 반복하면 양식 제출이 반복됩니다. 브라우저 기록을 사용하여 양식을 반복적으로 제출합니다. 브라우저의 HTTP 요청을 복제합니다.
양식 반복 제출을 방지하는 여러 가지 방법
1. 제출 버튼을 비활성화합니다. 양식이 제출된 후 JavaScript를 사용하여 제출 버튼을 비활성화하십시오. 이 접근 방식은 참을성 없는 사용자가 버튼을 여러 번 클릭하는 것을 방지합니다. 하지만 클라이언트가 Javascript를 비활성화하면 문제가 발생합니다.
이전 기사에서 일부 Jquery 플러그인을 사용하면 효과가 있다고 말한 적이 있습니다.
2.게시/리디렉션/가져오기 모드. 제출 후 페이지 리디렉션을 수행하는 것은 소위 PRG(Post-Redirect-Get) 패턴입니다. 즉, 사용자가 양식을 제출하면 클라이언트 측 리디렉션을 수행하고 제출 성공 정보 페이지로 이동합니다.
이렇게 하면 사용자가 F5 키를 눌러 발생하는 반복 제출을 방지할 수 있으며 브라우저 양식의 반복 제출에 대한 경고도 표시되지 않으며 브라우저의 앞으로 및 뒤로 버튼을 눌러 발생하는 동일한 문제도 제거할 수 있습니다.
3. 세션에 특수 플래그를 저장합니다. 양식 페이지가 요청되면 특수 문자열이 생성되어 세션에 저장되고 양식의 숨겨진 필드에 배치됩니다. Form 데이터를 접수 및 처리할 때 식별문자열이 존재하는지 확인하고 즉시 세션에서 삭제한 후 정상적으로 데이터를 처리합니다.
양식 제출에 유효한 플래그 문자열이 없는 것으로 확인되면 양식이 이미 제출되었으며 이 제출이 무시된다는 의미입니다.
이를 통해 웹 애플리케이션에 더욱 향상된 XSRF 보호 기능이 제공됩니다.
4. 데이터베이스에 제약 조건을 추가합니다. 데이터 중복을 방지하려면 데이터베이스에 고유 제약 조건을 추가하거나 고유 인덱스를 생성하세요. 이는 데이터의 중복 제출을 방지하는 가장 효과적인 방법입니다.
위는 이 4가지 방법에 대한 소개입니다. 더 나은 해결책이 있으면 알려주세요. 이 글은 계속 업데이트될 예정입니다.