2009-09-26 82 views
1

我有一個驗證碼命令,設置會話的值,然後刷新頁面,如果驗證碼不正確。刷新頁面是否會破壞PHP會話?

在頁面的驗證部分:

$_SESSION['refresh']=1; 
echo '<META HTTP-EQUIV="Refresh" Content="0"; URL="contact-test.php">'; 

當它運行了一下PHP腳本,看看是否有一個會話變量的值,如果它在頁面加載,然後回聲一個javascript函數用於通過onLoad命令在主體中調用的警報框。

在代碼的開始:

session_start(); 

if (isset($_SESSION['refresh'])) { 
    echo '<script type="text/javascript"> 
     function loadalert() 
     {alert("Incorrect security code, please try again.")} 
    </script>';} 

附近當頁面刷新會話值丟了,我可以告訴,我懷疑在session_start()命令清除所有以前的會話。我試過一個測試回聲,在循環之前和循環之前發出一些文本和會話的值;只有循環前的那個會在刷新時回顯而沒有會話值。

+0

您是否在「$ _SESSION ['refresh'] = 1」之前開始會話? – andho 2009-09-27 04:01:31

回答

4

否當會話僅在調用session_destroy()函數或設置了到期日期時才被銷燬。

您也可以清空SESSION數組以「銷燬」SESSION內部的任何內容。

2

正如Josua所說會話被銷燬只會調用session_destroy()。檢查您是否在前一頁中張貼的表單中存儲會話中的值。如果是這樣,當你刷新頁面時,前一頁的表格值被破壞(?)

+0

這實際上是我在整個網站上使用的唯一一個會話,我可以注意到。 – VikingGoat 2009-09-26 19:59:22

0

這裏可能很重要的一點是,COOKIES有一個技巧。我知道你問的是會話變數,但這可能會影響你,它已經讓我頭痛不止一兩次。

如果您在頁面上設置了cookie,那麼您在閱讀cookie時不能依賴它在那裏。也就是說,在一個頁面繪製中,cookie var不能被寫入和讀取,就好像它是一個變量。這是一個遙遠的事情,所以永遠不要以爲你可以寫信給它,只是馬上閱讀它 - 你剛纔寫的東西不會存在,因爲你的代碼在這個時候看到的cookie是「陳舊」的。我希望這是有道理的。

會話變量很棒,因爲它們的工作方式與您的預期完全相同。

1

如果由於某種未知的原因......代碼的順序是....

$_SESSION['refresh']=1; 
echo '<META HTTP-EQUIV="Refresh" Content="0"; URL="contact-test.php">'; 

session_start(); 

if (isset($_SESSION['refresh'])) { 
    echo '<script type="text/javascript"> 
     function loadalert() 
     {alert("Incorrect security code, please try again.")} 
    </script>';} 

那麼它不會工作。如果session_start()位於頁面的最頂端,那麼你的代碼應該可以正常工作。

也.....如果你有一些輸出之前已經開始..

$ _SESSION [ '刷新'] = 1; echo'';

你應該得到一個錯誤,但刷新將太快,你沒有注意到我的猜測。使用標題(「location:contact-test.php」);而不是那種過時的元刷新。