2009-01-18 276 views
142

$_SESSION變量存儲在客戶端或服務器上?

+0

在您運行php應用程序的服務器上,對於具體路徑,您必須檢查phpinfo() – densityx 2018-01-01 13:51:31

回答

7

正如泰勒先生指出的,這通常是在php.ini中設置的。通常它們作爲文件存儲在特定的目錄中。

22

他們通常存儲在服務器上。它們的存儲位置取決於開發人員。您可以使用session.save_handler配置變量和session_set_save_handler來控制會話在服務器上的保存方式。默認的保存方法是將會話保存到文件。他們被保存的位置由變量session.save_path控制。

112

如前所述,內容存儲在服務器上。然而,會話由會話ID標識,該會話ID存儲在客戶端並隨每個請求一起發送。通常,session-id存儲在cookie中,但它也可以附加到URL。 (這是你有時看到的PHPSESSID查詢參數)

+34

+1,因爲您暗示cookie不存儲$ _SESSION的內容(這些內容存儲在服務器上,所以不容易被客戶修改) – shufler 2010-11-11 15:01:44

+9

優秀的答案!我正在搜索這個問題:「爲什麼會話在刪除瀏覽器緩存後過期?」。你救了我的一天。 – Pupil 2013-06-17 07:50:31

12

在Debian上(對於大多數Linux發行版來說不是這種情況?),它保存在/ var/lib/php5 /中。如上所述,它是在你的php.ini中配置的。

18

另外還有一點需要注意的是,如果「/ tmp」是存儲會話數據的目錄(這似乎是默認值),那麼在重新啓動該Web服務器後會話將不會持續,因爲「/ tmp」通常在重啓過程中被清除。客戶端持久性的概念隨着服務器上存儲的持久性而變化 - 如果將「/ tmp」目錄用於會話數據,可能會失敗。

12

我使用的是Ubuntu,我的會話存儲在/ var/lib/php5中。

3

的Ubuntu 16.10的會話保存在/ var/lib中/ PHP /會話/ ...

1

它是如何工作的?它怎麼知道這是我?

大多數會話在用戶的計算機上設置一個用戶鍵(稱爲sessionid),如下所示:765487cf34ert8dede5a562e4f3a7e12。然後,當一個會話在另一個頁面上打開時,它會掃描計算機上的用戶密鑰並運行到服務器以獲取您的變量。

如果您錯誤地清除了緩存,那麼您的用戶密鑰也將被清除。由於您不知道您的ID,您將無法再從服務器獲取變量。