python - 如何防止狂点提交表单按钮导致的数据重复?
高洛峰
高洛峰 2017-04-18 10:05:45
0
12
1654
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(12)
洪涛

버튼을 클릭한 후 즉시 비활성화하세요. 제출에 실패하면 버튼을 복원하세요. 그렇지 않으면 성공 페이지로 리디렉션됩니다.

또는 클릭하면 마스크가 팝업됩니다.

그러나 위의 두 솔루션 모두 js가 필요합니다. 왜 js를 사용하고 싶지 않습니까?

迷茫

1.JS 버튼으로 반복 클릭 방지

2. 서버측 캐시 제어, 라이브러리를 반복적으로 작성하는 방법

3. 데이터베이스에 고유한 색인을 생성합니다(예: 게시물 제목이 고유하고 반복될 수 없음)

阿神

프런트엔드와 백엔드에서 제어 가능:

  • 사용자가 게시를 클릭하면 '게시' 버튼을 비활성화합니다.

  • 게시물 요청이 전송되면 해당 사용자가 동일한 제목과 내용의 게시물을 보냈는지 확인하세요. 그렇다면 중복 게시물 생성을 금지하세요

迷茫

템플릿 렌더링 시 ID를 생성한 후 제출 시 함께 제출한 후 백엔드와 비교하여 전달된 ID가 올바르지 않으면 처리가 무시되도록 할 수 있습니다.

PHPzhong

먼저 더 간단한 해결책은 디바운스 기능을 사용하여 DOM 콜백 트리거 빈도를 제한하는 것입니다.

두 번째로, 이 시대에 사용자가 js를 비활성화하는 상황을 여전히 고려해야 한다면 프런트엔드에서는 그렇게 하지 마세요.

洪涛

이 문제는 프런트엔드에만 의존해서는 해결될 수 없습니다.

  1. 캐싱을 추가하고, 단일 머신에는 맵을 사용하고, 분산 캐싱에는 Redis를 사용하세요.

  2. Mysql 저장 프로시저를 사용하여 동시성 부담을 데이터베이스에 넘겨주세요

  3. 잠금, 낙관적 잠금 또는 비관적 잠금

  4. 고유 키

刘奇

현재 페이지는 제출 시 고유 ID를 생성합니다. 예를 들어 laravel의 양식 제출 페이지에는 csrf_token

이 있습니다.
刘奇

그런 다음 배경에 자신만의 csrf를 작성하세요. 콘텐츠를 제출할 때 키를 가져오거나 다르면 키를 삭제하세요. 중복 제출

迷茫

숨겨진 필드에 있는 임의의 문자열을 지나서 양식 양식을 게시하고 세션에 넣습니다.
프로그램이 이 임의의 문자열을 수신하여 세션의 문자열과 비교할 때 동일하면 제출하고 동일하지 않으면 오류 비교 메시지가 표시됩니다.

이 세션을 재설정하세요.
Ty80

1. JS 검증, 제출 후 제출 버튼 비활성화
2. 서버 측 검증, 페이지가 새로 고쳐질 때마다 페이지에 토큰이 생성됩니다. 토큰이 유효한지 판단한 후 데이터를 처리한 후 토큰을 파기합니다. 프런트엔드에서 반복적으로 제출하면 토큰이 파기되므로 절대 처리되지 않습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿