>  Q&A  >  본문

python - 如何防止狂点提交表单按钮导致的数据重复?

高洛峰高洛峰2712일 전1561

모든 응답(12)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 10:07:45

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

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

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

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:07:45

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

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

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

    회신하다
    0
  • 阿神

    阿神2017-04-18 10:07:45

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

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

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

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:07:45

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

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:07:45

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

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:07:45

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

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

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

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

    4. 고유 키

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:07:45

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

    이 있습니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:07:45

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

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:07:45

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

    이 세션을 재설정하세요.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:07:45

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

    회신하다
    0
  • 취소회신하다