2013-11-21 3 views
0

첫째,이 질문과 비슷한 다른 질문이 있다는 것을 알고 있지만 내 문제에 대한 확실한 해결책이 없습니다.중복 제출 또는 두 번 누르기 제출 중단

고객이 주문을 제출하면 해당 주문에 대해 두 번 이상 처리 스크립트가 실행되지 않도록해야합니다.

/payment은 - 고객은 자신의 모든 세부 사항에 채우고

/process_order 순서를 제출 - 모든 데이터를 수집하고 주문을 처리합니다.

내 주문이 부분적으로 처리 된 후 완전히 다시 처리되는 현상이 발생합니다. 고객이 제출 버튼을 두 번 클릭했거나 제출 버튼을 클릭했기 때문일 수 있습니다. 프로세스가 완료되지 않았기 때문에 브라우저가 '감사'페이지로 리디렉션되지 않았기 때문에 두 번째로 ...

첫 번째 클릭 이벤트에서 버튼을 비활성화하기 위해 jQuery를 사용할 수는 있지만 또한 이런 일이 발생하지 않도록 서버 측에서 할 수있는 일이 무엇인지 알고 싶습니다.

답변

1

가능한 한 가지 해결책은 양식에 대한 nonce 토큰을 만들어 양식을 표시 할 때 세션에 저장하는 것입니다. 양식을 생성 할 때

$_SESSION['formNonce'] = md5(time() . uniquid()); 

, 숨겨진 필드로 추가 : 다음

<input type="hidden" name="formNonce" value="<?php echo($_SESSION['formNonce']); ?>"> 

그리고 그것을 처리 할 때, 당신이 할 첫번째 일은 비표가 세션에 확인하고 다음을 제거합니다. 이렇게하면 nonce 토큰이 제거되었으므로 두 번째 제출이 유효성 검사를 통과하지 못합니다.

이 모든 것에 약간의 조정과 오류 검사가 있지만 자바 스크립트 버튼과 결합하면 실행 가능한 해결책이 될 수 있습니다.

0

예를 들어 "anti-forgery tockens"접근 방식을 사용할 수 있습니다. 사용자가 페이지를 방문하면 tocken이 할당됩니다. 페이지를 제출하기위한 첫 번째 시도는 유효한 목록에서 tocken을 제거하므로 추가 시도는 실패합니다.

+0

예제를 만들 수 있습니까? – dcolumbus

+0

http://stackoverflow.com/questions/16276513/how-to-create-an-anti-request-forgery-state-token-in-google-server-side-sign-up –

+0

이 답변을 여러 번 보았습니다. 시간이 걸리며 일반 진술 이외에는 아무 것도 말하지 않습니다. 뭔가 의미있는 예제가 필요해. – dcolumbus