如果瀏覽器關閉並重新打開,PHP將開始一個新的會話。如何知道如何啓動一個新的會話
舊的會話文件仍保留在會話保存目錄中,但會啓動一個新的會話。
php在瀏覽器中尋找什麼知道它必須啓動一個新的會話?
我猜我真的問的是,究竟是什麼在session_start()引擎蓋
如果瀏覽器關閉並重新打開,PHP將開始一個新的會話。如何知道如何啓動一個新的會話
舊的會話文件仍保留在會話保存目錄中,但會啓動一個新的會話。
php在瀏覽器中尋找什麼知道它必須啓動一個新的會話?
我猜我真的問的是,究竟是什麼在session_start()引擎蓋
要簡單地回答您的問題,它會查找名爲PHPSESSID的cookie,如果請求中未提供cookie,則會調用session_regenerate_id來初始化cookie值。
然後,cookie在瀏覽器的整個生命週期中都會持續使用。
除非應用其他設置,否則這是默認行爲的精簡版本。
包含會話ID的Cookie設置沒有默認的到期下做的。這意味着它將在瀏覽器關閉時過期。所以會話將會丟失,因爲客戶端不再有舊的會話ID。
所有你想知道的是已經在這裏寫: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目錄中)並從那裏獲取數據。
只有在調用session_start()
之前的PHP頁面上沒有任何輸出時才存儲cookie。如果輸出了某些內容,則Cookie不會被存儲,您需要使用另一種方法(如上所述,SQLite
或MySQL
)來存儲這些值,並識別並分隔每個用戶。
會話ID保存在用戶瀏覽器的Cookie中。如果沒有發現/一個無效,則創建一個。 – Prisoner
http://stackoverflow.com/questions/1535697/how-does-php-sessions-work-not-how-are-they-used –
我很確定是否沒有活動會話,即任何舊會話都已過期,會話開始。 – Leeish