2011-01-23 27 views
0
  1. 會話ID以關閉瀏覽器(存儲爲cookie?)時通常會消失的方式存儲在客戶端上。
  2. 會話ID和相關數據存儲在每個啓動一個客戶端的服務器上(?)。

我主要想知道的是服務器如何知道會話何時結束,但。如果客戶端不再存儲會話標識(例如,在關閉瀏覽器之後),並且他們嘗試向服務器請求另一個會話,則會啓動一個新會話。服務器知道在設定的時間之後垃圾回收前一個會話數據嗎?在我看來,像是可能被濫用的東西...幫我看看我是否正確理解會話是如何在PHP中工作的

+0

服務器不知道會話何時結束。服務器在用戶不活動時默認爲24分鐘。 – 2011-01-23 12:42:58

回答

2
  1. 會話ID通常存儲在使用Cookie客戶端瀏覽器(可選地,在URL參數,但不推薦這樣做,如在http://php.net/manual/en/session.security.php解釋)
  2. 會話存儲在由定義的目錄中(例如/var/lib/php/sessions),或者系統的臨時目錄(如果沒有設置)(通常爲/tmp)。

會話是週期性垃圾收集的,無論是PHP本身在請求期間,還是通過cron作業(例如在Debian上這是默認值)。見http://php.net/manual/en/session.configuration.php#ini.session.gc-probability

我想知道的主要事情是,當一個會話結束

他不知道如何在服務器知道。但是他知道自某段時間以來沒有使用會話,因此它可以刪除未使用的會話。

服務器知道在設定的一段時間後垃圾回收了以前的會話數據嗎?

是的。這是由ini設置的session.gc_maxlifetime定義的。在垃圾收集期間,任何會話都會被刪除。垃圾收集頻率可以使用ini設置中的session.gc_probabilitysession.gc_divisor進行調整。 (請參閱doc。)

在我看來,似乎可能會被濫用的東西。

如果您的意思是某人可能會在服務器上創建過多的staled會話;是的,這可能是真的。

-2

會話自動失效並根據設置(例如20天沒有使用後)被清除,並且它們存儲在linux上,通常位於/ tmp/

以獲取更多信息檢查的php.ini

+0

呃...二十天? – 2011-01-23 12:40:02

+0

這取決於服務器的配置,它可能會更長 – 2011-01-23 12:40:45

0

你描述的是完全正確的。是的,它可以很容易被濫用。甚至有一種工具會自動劫持你周圍的會話(搜索firesheep)。會話通常以SESSION cookie存儲或每次在服務器和客戶端之間傳遞。
檢查PHP的一個非常簡短的intro,有些會話和安全性的Google會讓你更進一步。

相關問題