2014-03-04 5 views
1

다른 브라우저에서나 심지어 다른 시스템에서 동일한 브라우저에서도 매우 이상한 동작을 처리하고 있습니다. 처리되고 메일을 보내는 양식이 있습니다. 새로 고침 후 동일한 메일을 다시 보내지 않으려면 세션 변수가 확인됩니다.세션 변수는 브라우저간에 다르게 동작합니다.

주위에 if이 true가 아닌 경우에도 내 시스템의 Firefox가 변수를 설정 해제합니다. 다른 시스템의 Chrome이나 Firefox에서는 이러한 일이 발생하지 않습니다. 그리고 내가 아는 한 PHP는 브라우저에 전혀 의존해서는 안됩니다. 내 FF var_dump($_SESSION)에서

echo '<p>$_SESSION: <br />'; 
var_dump($_SESSION); //for testing only 
echo '</p>'; 

if(!isset($_POST['csent'])): 
    unset($_SESSION['call-sent']); // to reenable the form for a different message 
?> 

    <form id="call-form" action="" method="POST"> 
     <input type="hidden" name="csent" value="1"> 
     ... 
    </form> 

<?php elseif((isset($_POST['csent'])) 
       && (!isset($_SESSION['call-sent']))): 

    $_SESSION['call-sent'] = 'x'; 

     /*all the stuff that handels the form*/ 
?> 

    <div id="formsent"> 
     <!-- Success Message --> 
    </div> 

<?php else: ?> 
    <div id="formsent" class="repeat"> 
     <!-- Success Message --> 
    </div> 
<?php endif; ?> 

항상 array(0) { }입니다. 양식은 보내기 전에 표시됩니다. 내가 덤프 해제를 언급하면 ​​덤프는 예상대로 array(1) { ["call-sent"]=> string(1) "x" }입니다.

Chrome에서 양식을 보내고 페이지를 다시로드 한 후에는 array(1) { ["call-sent"]=> string(1) "x" }입니다.

이것은 중요한 점은 워드 프레스 템플릿의 일부입니다.

+0

하나의 시스템에서 쿠키를 차단 하나 다른 시스템에서는 차단하지 않습니까? – knittl

+0

시스템마다 차이가 있지만 예상대로 작동하지 않는 쿠키에 대해서는 덜 제한적인 FF입니다. – Seraphithan

답변

0

POST 데이터를 처리하면 다른 페이지로 리디렉션해야합니다. 이렇게하면 사용자가 페이지를 새로 고칠 수 없습니다.

POST 처리 후 간단히 header('Location: http://yoursite.com/path/to/script.php'); die();을 입력하십시오.

+0

폼이 전용 페이지가 아닌 사이드 바에 있기 때문에 피하는 것이 좋습니다. 나는 그것을 염두에 두겠다. – Seraphithan

관련 문제