2013-01-17 49 views
2

如果瀏覽器關閉並重新打開,PHP將開始一個新的會話。如何知道如何啓動一個新的會話

舊的會話文件仍保留在會話保存目錄中,但會啓動一個新的會話。

php在瀏覽器中尋找什麼知道它必須啓動一個新的會話?

我猜我真的問的是,究竟是什麼在session_start()引擎蓋

+1

會話ID保存在用戶瀏覽器的Cookie中。如果沒有發現/一個無效,則創建一個。 – Prisoner

+0

http://stackoverflow.com/questions/1535697/how-does-php-sessions-work-not-how-are-they-used –

+0

我很確定是否沒有活動會話,即任何舊會話都已過期,會話開始。 – Leeish

回答

0

要簡單地回答您的問題,它會查找名爲PHPSESSID的cookie,如果請求中未提供cookie,則會調用session_regenerate_id來初始化cookie值。

然後,cookie在瀏覽器的整個生命週期中都會持續使用。

除非應用其他設置,否則這是默認行爲的精簡版本。

0

包含會話ID的Cookie設置沒有默認的到期下做的。這意味着它將在瀏覽器關閉時過期。所以會話將會丟失,因爲客戶端不再有舊的會話ID。

0

所有你想知道的是已經在這裏寫:http://www.php.net/manual/en/function.session-start.php

在session_start()創建一個會話或恢復基於 當前一個通過GET或POST請求中傳遞會話標識符,或通過傳遞 Cookie。

當session_start()被調用或者會話自動啓動時,PHP會調用open和read會話保存處理程序。這些將會是 默認提供的內置保存處理程序或PHP擴展(如SQLite或Memcached的 );或者可以是由 session_set_save_handler()定義的自定義處理程序。讀取回調將檢索任何 現有會話數據(以特殊的序列化格式存儲),並且 將被解序列化並用於在讀取回調將保存的會話數據返回 返回到PHP會話處理時自動填充超全局$ _SESSION 。

基本上,PHP在文件系統中寫入一個特殊的文件(通常在/ tmp目錄中)並從那裏獲取數據。

0

會話ID(PHPSESSID)保存在用戶瀏覽器的Cookie中。如果沒有發現/一個無效,則創建一個。下面的圖片可能有助於理解您想知道的內容(來自Chrome)。

enter image description here

一旦PHP得到這個會話ID,它將查找存儲在會話save_path(通常在UNIX機器/tmp)的corrisponding會話。然後它使您能夠使用超全局的$_SESSION訪問存儲在該會話文件中的信息。

0

只有在調用session_start()之前的PHP頁面上沒有任何輸出時才存儲cookie。如果輸出了某些內容,則Cookie不會被存儲,您需要使用另一種方法(如上所述,SQLiteMySQL)來存儲這些值,並識別並分隔每個用戶。

相關問題