- 會話ID以關閉瀏覽器(存儲爲cookie?)時通常會消失的方式存儲在客戶端上。
- 會話ID和相關數據存儲在每個啓動一個客戶端的服務器上(?)。
我主要想知道的是服務器如何知道會話何時結束,但。如果客戶端不再存儲會話標識(例如,在關閉瀏覽器之後),並且他們嘗試向服務器請求另一個會話,則會啓動一個新會話。服務器知道在設定的時間之後垃圾回收前一個會話數據嗎?在我看來,像是可能被濫用的東西...幫我看看我是否正確理解會話是如何在PHP中工作的
我主要想知道的是服務器如何知道會話何時結束,但。如果客戶端不再存儲會話標識(例如,在關閉瀏覽器之後),並且他們嘗試向服務器請求另一個會話,則會啓動一個新會話。服務器知道在設定的時間之後垃圾回收前一個會話數據嗎?在我看來,像是可能被濫用的東西...幫我看看我是否正確理解會話是如何在PHP中工作的
/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_probability
和session.gc_divisor
進行調整。 (請參閱doc。)
在我看來,似乎可能會被濫用的東西。
如果您的意思是某人可能會在服務器上創建過多的staled會話;是的,這可能是真的。
會話自動失效並根據設置(例如20天沒有使用後)被清除,並且它們存儲在linux上,通常位於/ tmp/
以獲取更多信息檢查的php.ini
呃...二十天? – 2011-01-23 12:40:02
這取決於服務器的配置,它可能會更長 – 2011-01-23 12:40:45
你描述的是完全正確的。是的,它可以很容易被濫用。甚至有一種工具會自動劫持你周圍的會話(搜索firesheep
)。會話通常以SESSION cookie存儲或每次在服務器和客戶端之間傳遞。
檢查PHP的一個非常簡短的intro,有些會話和安全性的Google會讓你更進一步。
服務器不知道會話何時結束。服務器在用戶不活動時默認爲24分鐘。 – 2011-01-23 12:42:58