2013-03-19 65 views
8

我的PHP的網站流量是這樣的:如何正確清除我的php會話數據?

  • 有page1.php中的HTML表單POST到使page2.php這
  • 使page2.php存儲所有的POST數據到SESSION變量,有一個按鈕,導致第3頁。 PHP
  • Page3.php具有另一種形式職位的數據Page4.php
  • Page4.php然後存儲所有的POST數據到Session變量

我的問題是,它可以b需要用戶點擊Page4.php上的後退按鈕返回到Page3.php並更改一些輸入。因爲當他們回到Page3.php時,確保你的所有人都知道,因爲整個頁面以默認狀態重新呈現,表單將是空白的。

爲了解決這個問題,並重新顯示用戶已有的輸入IM這樣做:

<input value="<?php echo $_POST["guest1Ticket"];?> " type="text" name="guest1Ticket" id="guest1Ticket" onblur="isTicketNumber(this)" size ="22"/> 

這是重要的組成部分 - <?php echo $_POST["guest1Ticket"];?>

這工作,但對我產生了另一個問題。如果用戶返回Page1.php(在瀏覽器之前),並在他們到達Page3.php時再次啓動該過程,那麼他們上次運行的數據將被加載到表單中。

我想我需要做的是在用戶訪問Page1.php時清除所有的變量變量。我試着向,像這樣:

<?php 
session_start(); 
session_unset(); 
session_destroy(); 
?> 

(以上是我的文件的最頂部的第一個字符前沒有空格)

沒有警告時產生page1.php中加載但會話變量沒有被取消設置。當我到達Page3.php時,最後一次運行的數據仍然被輸入到表單中。

如何正確清除會話數據?

順便說一句我只需要這個在Chrome和那裏即時通訊測試工作。

回答

11

只對不使用$ _SESSION的較舊的棄用代碼使用session_unset()。

session_destroy manual

例如,你可以試試,看看它是如何工作

session.php文件

<?php 
session_start(); 
$_SESSION = array('session1'=>1,'session2'=>2); 

echo $_SESSION['session1']; //1 
$_SESSION['session1'] = 3; 
echo "<pre>"; 
print_r($_SESSION); //session one now updated to 3 
echo "</pre>"; 


$_SESSION = array(); 
if ($_SESSION['session1']) { 
echo $_SESSION['session1']; // IS NOW EMPTY 
} else { 
echo "woops... nothing found"; 
} 
?> 
<p> 
<a href="destroyed.php">NOW GOING TO DESTROYED PHP<a/> 
</p> 

<?php 
session_destroy(); 
?> 

destroyed.php

<?php 
session_start(); // calling session start first on destroyed.php 

print_r($_SESSION); // prints Array () 
?> 
+0

看到這個鏈接也試過'$ _SESSION = array();'但是沒有使用變量,所以我回到上面的方法。似乎我在某處丟失了某些東西 – DelightedD0D 2013-03-19 05:44:30

+0

我編輯了我以前的評論,爲您添加了代碼片段。所以你可以看到它是如何工作的,記住每次使用$ _SESSION時你都需要調用session_start();在那個文件中。 – Grmn 2013-03-19 05:55:35

+0

這看起來像它應該工作,但它deosnt,這就是被每次去打印出到1個page1.php中陣列 ( [會話1] => 3 [會話2] => 2 ) woops .. 。沒有發現任何東西 – DelightedD0D 2013-03-19 06:14:16

1

從文檔:

If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used, 
use unset() to unregister a session variable, i.e. unset ($_SESSION['varname']); 

,照顧約session_destroy:

session_destroy銷燬所有與當前會話相關的數據。它不會取消任何與會話相關的全局變量

+0

是的,我看到了,但我有大約100 variuables並會過早地不要清除各自獨立。我正在尋找一種方法來一次清除它們 – DelightedD0D 2013-03-19 05:41:59

+0

您可以在不知道每個元素的情況下輕鬆遍歷$ _SESSION。 – MatRt 2013-03-19 05:43:37

+0

夠公平的,畢竟它是一個數組。我只知道有一種標準的方法可以一次完成它們,但無法實現它。感謝您的幫助! – DelightedD0D 2013-03-19 08:01:46

0

使用session_unset()。就像這樣:

<?php session_start(); ?><!DOCTYPE html> 
<html> 
    <body> 
    <?php 
     $_SESSION["variabletounset"] = "I am going to be unset soon along with all of the other session variables."; 
     print '<pre>' . "\n"; 
     print_r($_SESSION); 
     print ' </pre>' . "\n"; 

     session_unset(); 

     print ' <pre>' . "\n"; 
     print_r($_SESSION); 
     print ' </pre>' . "\n"; 
    ?> 
    </body> 
</html> 

這將輸出:

Array 
(
variabletounset => I am going to be unset soon along with all of the other session variables. 
) 

Array 
(
)