2013-12-19 1 views
1

아래 코드를 사용하여 버튼을 두 번 클릭하면 사용자가 양식을 두 번 제출하는 것을 방지하려고합니다.두 번 제출을 방지 할 때 세션 변수 설정이 작동하지 않음

// Check token is present 
if (!isset($_POST['token'])) { 
    // Token missing 
    exit(); 
} 

// Check token matches session value 
if ($_POST['token'] != $_SESSION['token']) { 
    // Token mismatch 
    exit(); 
} 

// Valid submission - Invalidate token 
unset($_SESSION['token']); 


// Make payment 
$result = makePayment(); // cURL request to api 

문제는 unset($_SESSION['token'])이 작동하지 않는 것입니다. 두 번째 요청에서 토큰은 세션에 남아 있습니다. 세션 값이 다음 제출 전에 지워지지 않기 때문이라고 생각합니다. 비슷한 질문이 resepnse에서

: https://stackoverflow.com/a/1025919/1587851 session_write_close() 제안하고 내가 노력하고 내 해제 후 추가 생각,하지만 난 정말 무엇을하는지 이해가 안 :

// Valid submission - Invalidate token 
unset($_SESSION['token']); 
session_write_close(); 

두 질문 :

  1. 이 솔루션에 문제가 있습니까?
  2. session_write_close()를 호출 한 후에도 세션 변수를 가져오고 설정할 수 있습니까?

감사합니다.

은, 내가 할 데이터베이스에

+0

페이지 시작 부분에 "session_start()"를 넣었습니까? –

+0

@ mArm.ch 예, 단지 위의 스 니펫에 없습니다. – paul

답변

0

시도를 세션 데이터를 저장하기 위해 ADOdb의를 사용하고 관련이있을 수 :

$_SESSION['token'] = null; 

는 때때로, unset()이 immediatly 효과가 없습니다.