回答
如果您在會話中存儲了大量數據,由於會有大量的讀/寫操作,因此會導致輸入/輸出性能下降。
默認情況下,PHP中的會話存儲在/ tmp目錄中的平面文件中。因此,會話數據被寫入某種數據文件中。
PHP允許您通過session_set_save_handler()
函數覆蓋其默認會話處理函數,您可以在其中重新定義會話讀/寫/維護的方式。
您也可以通過php.ini文件覆蓋此處,您可以通過session.save_handler
指令指定它。
現在,大量會話存儲大量數據的含義是,將創建大量文件,並且由於硬盤驅動器的操作方式(機械硬盤驅動器的操作方式)需要一些時間才能找到它們仍然是常見的)。 你擁有的越多,找到它的時間就越長。它們越大,閱讀時間越長。如果你有很多這樣的人,而且他們很大 - 這是麻煩的兩倍,那麼需要改變方法。
那麼有什麼解決方案?
通常,當遇到性能下降 - 人們負載平衡他們的網站。這不會與會話不起作用,因爲負載平衡選擇使用哪臺計算機來處理當前請求。這意味着不同的電腦將爲您在某個網站上瀏覽的網頁提供服務。這意味着,如果這些計算機使用會話存儲的默認機制(/ tmp目錄),則會話將不會保留在服務器中,因爲它們無法訪問彼此的/ tmp目錄。 您可以通過安裝NAS並使其對羣集中的所有計算機全局可見來解決此問題,但這樣既昂貴又難以維護。
另一種選擇是將會話存儲在數據庫中。數據庫可以從我們的虛擬羣集中的任何計算機訪問。通常,有專門的數據庫用於處理會話,專門從存儲網站內容的數據庫中分離出來。 在NoSQL受歡迎的時代 - 在我看來,NoSQL非常適合處理會話。它們可以輕鬆擴展,它們比RDBMS更快地將數據寫入存儲設備。
第三個選擇是提升所有這些,將硬盤作爲永久性存儲解決方案,並僅使用服務器的內存來存儲會話。 你得到的是令人難以置信的性能,但是你的內存可能會很快消失。 您也可以創建一個將會話存儲在RAM中的計算機集羣。 Redis和Memcache非常適合這項任務,使用googling會爲您提供很好的資源,解釋如何使用Redis或Memcache來存儲會話。
所有這些的底線是:不要在會話中存儲太多數據。 根據您的需求和預算 - 有3個選項可用於如何存儲和使用會話。
這是一個很好的鏈接:http://tuxradar.com/practicalphp/10/1/0
會話數據是非常昂貴的工作量太大。做到這一點的最佳方式是存儲cookie或session_id,並使用它從dbfile/rdbms中查找所需的內容。這還允許您的站點跨多服務器環境運行,因爲會話數據僅限於單個環境。
- 1. ASP.NET會話大小限制
- 2. 笨會話大小限制
- 3. wincache會話文件大小限制
- 4. ASP.Net - 會話限制
- 5. 春天限制最大會話;限制最大用戶數
- 6. CI會話BLOB大小
- 7. codeigniter中會話的大小
- 8. JSch會話超時限制
- 9. 限制會話用戶PHP
- 10. 數據庫會話存儲大小限制
- 11. PHP會話的最大大小
- 12. PyFacebook無限會話
- 13. J2EE會話移動和會話複製
- 14. 控制會話
- 15. 會話控制
- 16. 限制Facebook共享對話框大小
- 17. asp.net會話大小太多了多少?
- 18. 笨 - 會話用戶數據大小
- 19. 的Java EE - 找到會話大小
- 20. 如何檢查Asp.Net WebForms會話大小
- 21. Codeigniter會話大小和併發用戶
- 22. WIF會話和區分大小寫
- 23. IIS內存泄漏 - 會話大小
- 24. 狀態會話bean池的大小
- 25. 減少會話的日誌大小
- 26. Seam中的會話大小是多少?
- 27. 減少會話大小運行時間
- 28. 會話cookie受路徑限制?
- 29. 每個會話的線程限制?
- 30. 與會話VAR SQL錯誤PHP限制
請參閱http://stackoverflow.com/questions/4649907/maximum-size-of-a-php-session http://stackoverflow.com/questions/217420/ideal-php-session-size – Mob
你已經曾在這裏。請停止簽署您的帖子(您的標題應該_描述問題_,而不是列出技術和主題) –