PHP SESSION 重新整理就失效,是發生什麼事情?

正常來說除非是過久沒有跟伺服器互動,否則 PHP 的 SESSION 不會在「重新整理」後立刻消失。但之前實習有次在開發平台時,卻遇到了一個很尷尬的問題:

前一頁設定好日期並以 session 形式儲存,傳到下一頁。而頁面轉到下一頁時也能夠正常輸出,但如果因為一些原因需要重新整理時,session 卻很神奇的失效了!


為什麼會發生這個情況?

後來我開始著手找尋資料,網路上看到資料是說,你可以設定多久 session 會被銷毀、或是永遠不銷毀,但是我是完全沒有做任何動作,重新整理就被銷毀了。看了許多論壇,有人說根本不可能重新整理後就沒了,看是從哪裡不小心把它銷毀?

後來我省思了一下整個流程:我在 a 頁打好要傳送的資訊,透過 JavaScript 的方式存取並傳送至 PHP,再透過 SESSION 的方式接收;後來我再仔細看了一下程式碼,我終於想通了!

這是我原先的程式碼,只有簡單的一行:

1
$_SESSION['變數名稱'] = $_GET['陣列名稱']['變數名稱'];

因為我在重新整理時,「$_GET[‘陣列名稱’][‘變數名稱’]」本身是沒有值的,但卻又傳入 SESSION 裡,那這個 SESSION 變數的值就被清掉了!

發現問題點後,我就多加了一行判斷式,先檢查有「$_GET[‘陣列名稱’][‘變數名稱’]」的存在,才會將值傳送到 SESSION 變數。

修改後如下:

1
2
3
if(isset($_GET['陣列名稱']['變數名稱'])){
$_SESSION['變數名稱'] = $_GET['陣列名稱']['變數名稱'];
}

結果與後記

經過修改後這個問題就解決了。雖然我相信這只是非常簡單的程式碼,但寫程式真的是有時候漏了一個環節,就會發現自己沒有預期到的錯誤!寫程式真的是很靠細心程度呢!