2009-10-06 81 views
2

我在理解PHP的會話時遇到了一些麻煩。首先我將會話數據保存在數據庫中,我使用PHP的session_set_save_handler()函數來定義它。PHP的會話存儲

我明白當PHP保存會話數據到數據庫的方法是像這樣:

如果我定義了那麼一些會話變量輸出一些文本到用戶的瀏覽器,我相信會話數據不會保存到DB直到文本輸出。請看看這段代碼:

$_SESSION['username'] = $username; 


//check if session variable set 
if($_SESSION['username'] != $username) 
{ 
die('error...'); 
} 

在代碼中的if語句返回false,所以die()永遠不會發生。此外,PHP不會將會話數據寫入數據庫,直到if語句之後。我不明白的是,如果會話數據還沒有寫入數據庫,PHP如何比較$_SESSION['username']$username?會話數據寫入數據庫時​​,是否將$_SESSION['username']存儲在服務器內存中,直到腳本結束爲止?

謝謝你的時間。

+1

如果你這樣做是偶然還是不不知道,但你的第一行,在報價包$用戶名是不必要的。 – ryeguy 2009-10-06 20:31:10

+0

哦,是的,這是一個意外。 – lanmind 2009-10-06 20:47:52

回答

2

沒錯。

會話數據保存在內存中直到請求結束(或直到調用session_write_close())。然後將$ _SESSION的內容寫入配置的存儲機制。

在下一次請求時,當session_start()發生時,數據會從存儲中加載到$ _SESSION,直到請求完成。

否則,PHP會讀取/寫入數據庫(在你的情況)每次你觸及任何會話。

2

_SESSION是一個「普通」數組,就像$a = array()一樣。
只有在調用session_start()並且先前存儲的數據被讀取(返回)到_SESSION並且會話機制停止時(當php實例關閉或調用session_write_close()時)和數據_SESSION被序列化並存儲。