2011-04-08 157 views
34

我想知道PHP會話數據保存在哪裏;它在客戶端瀏覽器中嗎?或在服務器上?會話保存在哪裏?

當我在瀏覽器設置中禁用cookie時,PHP無法保存會話數據,但在php.ini中,我可以更改會話保存路徑。

會話數據存儲在服務器或客戶端瀏覽器上嗎?

回答

73

會話數據您使用$_SESSION讀寫的內容存儲在服務器端,通常是臨時目錄中的文本文件。他們不能從外面訪問。

將會話連接到客戶端瀏覽器的事件是會話ID,它通常存儲在cookie中(請參閱註釋以瞭解該規則的例外情況)。這個ID是並且應該是關於你的會話存儲在客戶端的唯一信息。

如果刪除瀏覽器中的cookie,即使服務器上的文件在一段時間內仍然存在,與該會話的連接也會丟失。

session.save_path變量影響存儲會話數據的服務器上的位置。如果您不是服務器的管理員,通常不需要更改它。

+5

如果禁用了cookie,會話ID將附加到所有頁面請求。 – Martijn 2011-04-08 09:54:13

+2

@Martijn這不是會話的默認行爲。這需要更多的代碼東西在你身邊 – 2011-04-08 09:56:27

+1

正確,如果cookie不可用,會話ID將通過URL和隱藏表單輸入傳遞。這由PHP自動處理。見http://www.php.net/manual/en/session.idpassing.php – Capsule 2011-04-08 09:56:33

4

兩者,客戶端(瀏覽器)中的會話都保存爲cookie。此cookie引用也位於服務器上的會話。

10

這是兩個!會話將實際會話信息保存在服務器上,但會向客戶端提供一個識別cookie,以瞭解哪個會話屬於哪個客戶端。 cookie本身的信息毫無價值,但允許服務器識別客戶端並使用實際的會話信息。

1

它存儲在服務器端以保持安全;但額外的cookies也可以存儲在客戶端。

1

Blockquote「會話數據存儲在服務器還是客戶端瀏覽器?」

這讓我想起一個代客停車系統。代客(服務器)保存你的車(會話數據),但他/她給你一張票(會話ID)掛在上面證明,當你需要訪問它時,車是你的。如果您失去了票據(通過刪除緩存或關閉瀏覽器),您的汽車(會話數據)就像已經消失,因爲您無法再證明它是您的汽車。

好吧,這只是一個比喻......並迅速崩潰。例如。你實際上並不擁有自己的會話信息,比如你做你的車。你不會把它趕走。