2013-02-20 3 views
0

$_SESSION을 사용하여 다중 페이지 양식의 데이터를 저장하고 있습니다. 제출을 마칠 때까지 모든 것이 훌륭하게 작동하고 있었고 사람이 양식을 다시 입력하려고 할 때 동일한 양식 데이터가 복제되지 않도록 세션이 종료되었습니다. 양식을 완료하고 제출하면, 세션을 죽이고 세션 데이터를 삭제 : 나는 새로운 세션 쿠키가 설정되고 있음을 확인했다

<?php 
session_start(); 

include "connect-moo.php"; 
$learning = true; 

//get any post variables and save them to the session 
foreach ($_POST as $key => $val) { 
$_SESSION[$key] = $val; 
} 

sessionDump(); //dumps session to db 

//check to see if step is set (in the post eg ?step=getaquote). If not, set it to current session step 

if(!isset($_POST["step"])) { 
if(isset($_SESSION['step'])) { 
    $_POST['step'] = $_SESSION['step']; 
} 
} 

//show the page appropriate to the current step 
if ($_SESSION['mode'] == 'edit' && $_SESSION['lastpage'] != "review" && $_SESSION['step'] != "session") { 
$_SESSION['lastpage'] = 'review'; 
getReview();  
} 
else { 
if($_SESSION['step'] != 'session') $_SESSION['lastpage'] = $_SESSION['step']; 

switch ($_POST["step"]) 
{ 

    case "session": 

     foreach($_SESSION as $key => $val){ 
      echo $key.": ".$val."<br>"; 
      //phpinfo(); 

     } 

     echo "Post Data<br>"; 
     foreach($_POST as $key => $val) { 
      $sval = mysql_real_escape_string($val); 
      $skey = mysql_real_escape_string($key); 
      echo $skey.": ".$sval."<br>"; 

     } 

     break; 

    case "getaquote": 

     getAQuote(); 
    break; 

    // and so on... 

      default: 
     start(); 
} 
} 

... (all of the abovementioned functions) 


?> 

하지만 $_POST$_SESSION :

$_SESSION = array(); 

setcookie(session_name(), '', time() - 42000); 

session_destroy(); 

은 무엇 다음 것은 이것이다 세션을 다시 시작한 후 비어 있습니다. 최근 수정 (감사합니다!)에서는 데이터를 $ _POST 및 $ _SESION 배열에 프로그래밍 방식으로 푸시 (예 : $ _POST [ 'foo'] = 'bar';)하지만 URI를 통해 전달 된 변수는 무시됩니다.

정말 고맙겠습니다. 무슨 일인가.

솔루션 :

재로 세션, 올바른 코드, 알렉스 B에 의해 지적이다 :

session_start(); 
session_unset(); 
session_destroy(); 
session_write_close(); 
setcookie(session_name(),'',0,'/'); 
session_regenerate_id(true); 

다시. $ _POST 문제 - URL을 통해 직접 정보를 입력 할 때 서버가 POST가 아닌 GET으로이를 (올바르게) 해석하고있는 것으로 나타났습니다. 모든 코드를 가져 오도록 & POST 데이터를 수정했지만 프로덕션에서는 POST 만 필요합니다. 새 코드는 다음과 같습니다.

//get any submitted variables and save them to the session 
foreach ($_GET as $key => $val) { 
$_SESSION[$key] = $val; 
} 
foreach ($_POST as $key => $val) { 
$_SESSION[$key] = $val; 
} 

감사합니다.

+2

그들은 빈 _are_ 또는 _aren't_? 나는 그 말씨가 혼란스러운 유일한 사람인가? –

+0

더 많은 코드, 더 구체적으로 작동하지 않는 부분을 볼 필요가 있습니다. – Mike

+0

@ ColinMorelli "아무것도"는 거기에 있지 않아야한다고 생각합니다. –

답변

0

잘못하고 있습니다.

session_destroy()은 현재 세션과 관련된 모든 데이터를 파괴합니다. 세션과 관련된 전역 변수를 설정 해제하거나 세션 쿠키를 설정 해제하지 않습니다. 세션 변수를 다시 사용하려면 session_start()을 호출해야합니다.

세션을 모두 종료하려면 사용자를 로그 아웃하는 것처럼 세션 ID도 설정 해제해야합니다. 쿠키가 세션 ID (기본 동작)를 전파하는 데 사용되면 세션 쿠키를 삭제해야합니다. setcookie()을 사용할 수 있습니다.

솔루션 :

session_start(); 
session_unset(); 
session_destroy(); 
session_write_close(); 
setcookie(session_name(),'',0,'/'); 
session_regenerate_id(true); 
+1

쿠키 만료는 '0'은 "브라우저가 닫힐 때까지"를 의미합니다. – Mike

+0

고마워요. 그래서 $ _SESSION이 정렬되고 데이터를 저장할 수 있습니다. 하지만 $ _POST는 아직 아무것도 받아들이지 않습니다 .b 이것이 관련 될 수 있습니까? – o2fill