2014-06-14 2 views
0

다중 페이지 가입 정보를 임시 저장하려고합니다. 이전 세션이 새로운 가입 데이터를 엉망으로 만들고 싶지 않기 때문에 이전 세션을 파괴하려고합니다. 문제는 다음과 같습니다.session_destroy() + session_start()가 헤더 리디렉션 이후가 아님

signup1.php

//Start new session 
session_regenerate_id(TRUE); 
session_destroy(); 
unset($_SESSION); 
session_start(); 

//Store values in session 
$_SESSION['created'] = time(); 

//Redirect to second step 
header('Location: '.$settings->siteurl.'signup2.php'); 
exit(); 

signup2.php

<pre> 
<?php 
    //Print $_SESSION (empty array) 
    print_r($_SESSION); 
?> 

작업 (그러나 오래된 $ _SESSION 값 + 업데이트 된 값 반환) :

작동하지

//Start new session 
session_regenerate_id(TRUE); 

//Store values in session 
$_SESSION['created'] = time(); 

//Redirect to second step 
header('Location: '.$settings->siteurl.'signup2.php'); 
exit(); 

무엇이 문제를 해결할 수 있습니까? 첫 번째 session_start(); init.php에 설정되어 있지만 session_regenerate_id (TRUE)보다 위에 놓으면 상관 없습니다. 배열은 비어 있습니다.

답변

1

당신이 먼저 사용해야합니다

session_start(); // Starts a new or resumes an existing session 

이 그럼 당신은 사용할 수 있습니다 :

session_regenerate_id(TRUE); // regenerates the active session id 

TRUE/delete_old_session 매개 변수가 사용됩니다 :

이전 관련 세션 파일을 삭제할지 여부 아닙니다.

session_regenerate_id는 세션 하이재킹을 방지하는 데 유용하고 그냥 새로운 id를 다시 생성하지만, 세션 데이터를 유지합니다. 사용자의 액세스 수준이 변경되거나 시간 간격 (예 : 10 분마다)을 사용하지만 새 세션을 새로 생성하기 전에 사용해야합니다. session id 먼저 세션을 시작해야합니다.

+0

감사합니다. 하지만 사용자의 세션 데이터를 재설정하여 모든 값이 새로 추가되거나 삭제되도록하려면 어떻게해야합니까? – Hidde

+0

세션을 완전히 파괴하고 그 데이터를 완전 삭제 하시겠습니까? –

+0

예. 사용자가 이미 양식을 한 번 제출하고 세션에 값을 넣었으며 페이지 2로 리디렉션되었다고 가정합니다. 1 페이지에 양식을 다시 제출하면 해당 양식을 삭제하고 싶습니다. – Hidde