2011-11-07 4 views
1

나는 한 번만 제출할 수 있기를 바라는 형태로 whmcs를 작성하여 제출하고 새로 고침하여 다시 제출하십시오. $ _POST 설정을 취소하려고합니다. 또는 리디렉션,하지만이 상황에서 작동하지 않을 것입니다, 어떻게 키를 생성하고 그것을 한 번만 사용할 수 있도록? mysql을 사용할 수 없다.PHP로 FORM 키를 생성하는 지능적인 방법

+0

http://en.wikipedia.org/wiki/Post/Redirect/Get – zerkms

+0

[사용자가 양식을 두 번 제출하지 못하게하는 방법] (http://stackoverflow.com/questions/16814157/how- do-prevent-users-from-form-twice-twice) – Gajus

답변

3

왜 세션에 임의의 키를 저장하지 않습니까? 이것이 대부분의 CRSF 토큰 시스템의 작동 방식입니다. 폼을로드 할 때 키를 생성하여 세션에 저장하고이를 폼에 포함시킵니다. 제출할 때 키를 비교하고 저장된 키를 삭제하십시오.

그냥 실수로 성공적으로 제출 양식을 다시 제출하도록 사용자를 원하지 않는 경우는, @zerkms '주석에서 링크는 당신이 원하는 무엇인가 : http://en.wikipedia.org/wiki/Post/Redirect/Get

+0

예, 무작위 키를 생성하여 세션 및 양식에 넣고 POST 수신시 비교합니다. Javascript를 사용하여 Form에서 뭔가를 할 수는 있지만 클라이언트 쪽에서는 그렇게 할 수 없습니다. – Flo

0

양식이 제출 된 경우 세션 또는 쿠키를 설정하고 미리 존재하는지 확인하십시오.

영원한 수표를 원한다면 정보를 IP 및 브라우저와 같은 데이터베이스에 저장할 수도 있지만 이것은 자신의 문제이므로 100 % 시간을 멈추지 않을 것입니다. 당신이 당신의 작업을 완료 한 후

1

더블 게시를 방지하는 가장 일반적인 방법은

header('location: /'.$your_url_here); 

을하는 것입니다. 그래서 당신은 $ _POST없이 같은 페이지로 리디렉션합니다.

+1

헤더 뒤에 – Tech4Wilco

+0

네, 맞아요, 또한 그걸로 끝내기 (exit)를 추가하는 것을 추천합니다 - 여기에 쓰는 것을 잊었습니다 :) – oyatek

+0

페이지가 $ _POST [ 'id']을 (를) 필요로하지 않습니다. 항상. –

0

나는 이것이 오래된 질문이라는 것을 알고 있지만 나는 최근에 같은 문제가 있었다. POST 후에 다른 멋진 템플릿 파일로 전환하는 경우에도 제품 상세 페이지 (예 :)에 머물고 싶으면 Post/Redirect/Get 솔루션이 WHMCS에서 작동하지 않는 것 같습니다. 아마도 $ _POST [id ']가 필요하고 새로 고침 후에 사라질 것입니다. 그래서 내가 얻을 수있는 가장 가까운 것은 원래의 포스터가 원하는 것이 아닌, 내가 원한 것이 아닌 제품 목록 페이지로 되돌아가는 것이 었습니다.

마지막으로 해결책은 양식을 제출 한 후 $_SESSION[submitted] 변수를 추가하는 것입니다. 자신이하는 일에 따라 논리를 알아 내야 할 것입니다. 상단에와 POST 폼 데이터가 존재하지 않는 경우는 세션 키를 "제출"재설정

if ($_SESSION['submitted'] == 1 && !isset($_POST['somecustomkey'])) { unset($_SESSION['submitted']); }

:

내 논리는 같은 간다.

그런 다음 정보를 데이터베이스에 쓰거나 다른 것을 작성하기 전에 수표를 추가하십시오.

if ($_SESSION['submitted'] != 1) { //Do some stuff with $_POST form data $_SESSION['submitted'] = 1; }

나는이 의도 $ _SESSION의 목적과 쉽게 구현할과 잘 맞는 것 같아요.

관련 문제