2014-03-04 43 views
1

我正在處理不同瀏覽器甚至不同系統上相同瀏覽器之間非常奇怪的行爲。我有一個表單處理併發送郵件。爲了避免在刷新會話變量後再次發送相同的郵件。會話變量在瀏覽器之間的行爲有所不同

由於某些原因,即使周圍的if不正確,我係統上的Firefox也會取消該變量。在另一個系統上的Chrome或Firefox中不會發生這種情況。據我瞭解,PHP不應該依賴於瀏覽器。

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; ?> 

在我的FF var_dump($_SESSION)總是array(0) { }。表格雖然只在發送之前顯示。如果我評論未設置,則按預期轉儲array(1) { ["call-sent"]=> string(1) "x" }

在Chrome中,它是array(1) { ["call-sent"]=> string(1) "x" },表單已發送且頁面重新加載後。

這是wordpress模板的一部分,如果它很重要。

+0

您是否在一個系統上阻止Cookie,但不阻止其他系統? – knittl

+0

系統之間存在差異,但是對於不符合預期行爲的Cookie,限制較少的FF。 – Seraphithan

回答

0

一旦您處理了POST數據,您應該重定向到另一個頁面。這樣用戶就不能刷新頁面。

在POST處理後,只需簡單地將header('Location: http://yoursite.com/path/to/script.php'); die();即可。

+0

我寧願避免這種情況,因爲表單位於側邊欄而不是專用頁面上。不過我會記住它的。 – Seraphithan

相關問題