我被告知將會話存儲在數據庫中的一個常見原因是使其跨服務器。但是,在關閉瀏覽器之前,TCP連接是否持久?爲什麼下一個請求可能會切換不同的服務器?我們爲什麼需要將會話存儲在數據庫中?
0
A
回答
3
但是,在關閉瀏覽器之前,TCP連接是否持續存在?爲什麼下一個請求可能會切換不同的服務器?
一旦網頁加載,並且所有圖像,css文件和其他資產都被檢索到,TCP連接將很快關閉(例如,Apache 2.2中的after 5 seconds by default)。當用戶點擊其他內部鏈接時,會打開一個新的TCP連接。這可能會導致多服務器負載均衡場景中的另一臺服務器上。
1
將會話存儲在數據庫中,以便在負載平衡應用程序時,負載平衡器可以將請求轉發到服務器場中的任何服務器,並仍然可以正確訪問會話數據。
對網頁的單個請求將轉到單個服務器。下次用戶發出請求時,會創建一個新的TCP連接,並可以將其發送到服務器場中的其他服務器。
0
瀏覽器中的頁面加載通常是無狀態的(即,頁面完全加載後它們不會存儲狀態)。
這意味着您的下一頁加載可能與從購物目錄頁面到購物車頁面一樣簡單,它是一個單獨的HTTP「事務」。
事實上,一個頁面及其12個圖像(和400個色情廣告)的文本可能每個都會轉到一個完全獨立的服務器(即使它們使用相同的基本URL),因爲它們可能使用不同的TCP會話。
您不希望序列化所有流量,以便重新使用單個TCP會話,但在單獨的會話上並行執行它們通常會更快。
因此,它可能最終在一個完全不同的服務器,是的。在這種情況下,你會希望存儲在某種共享資源(如數據庫)中的狀態。
還有其他方法可以解決問題(總是存在),例如基於IP的關聯,其中來自同一IP地址的流量將優先選擇同一臺服務器,但面對所有可愛的負載平衡體系結構時,這種蒼蠅:-)
相關問題
- 1. 爲什麼數據不會存儲在我的數據庫中?
- 2. 將會話存儲在數據庫中
- 3. 爲什麼coldfusion不在數據庫中存儲會話
- 4. 存儲庫模式 - 爲什麼我們需要接口?
- 5. 爲什麼我們需要數據庫表中的審覈列?
- 6. 爲什麼會話需要存儲在站點服務器上?
- 7. 爲什麼在maven中需要鏡像,而我們可以修改存儲庫?
- 8. 圖數據庫:爲什麼我們需要它?
- 9. 爲什麼我們需要一個數據庫驅動程序?
- 10. 我們是否需要在將會話ID保存到數據庫之前加密會話ID
- 11. 爲什麼我們在創建存儲庫時需要創建xxxCustom和xxxImpl類?
- 12. 爲什麼我們需要在數據源中提供密碼?
- 13. 爲什麼我們需要在MongoDB中定義數據模型
- 14. 爲什麼我們需要使用存儲過程?
- 15. 爲什麼我們需要瞬態故障處理存儲?
- 16. 爲什麼我們需要建議一個變量存儲在寄存器中?
- 17. 將會話數據存儲在數據庫和memcache中
- 18. 什麼是數據庫中的會話存儲?
- 19. 什麼是__i686.get_pc_thunk.bx?我們爲什麼需要這個電話?
- 20. 爲什麼將oauth 1.0令牌存儲在數據庫中 - 爲什麼不只是保持會話呢?
- 21. 需要在Java中存儲會話/事務的數據
- 22. 將數據存儲在會話中
- 23. nodejs。什麼庫我應該使用會話存儲在MongoDB中
- 24. 什麼是仿函數,爲什麼我們需要它們?
- 25. 爲什麼我們需要在JavaScript
- 26. 爲什麼要「將實例類存儲在數據庫中作爲實體」?
- 27. 什麼是線程本地存儲?我們爲什麼需要它?
- 28. 爲什麼我們需要在編譯器中分配存儲空間
- 29. PHP - 將大會話數組存儲在$ _SESSION或數據庫中?
- 30. 爲什麼我需要在我的settings.xml文件中指定一個存儲庫
糟糕...我以爲TCP連接的生命週期與瀏覽器窗口是一樣的.. – powerboy 2010-07-02 01:27:47
單個TCP會話的生命週期甚至可能不是單個「頁面」 - 這是可能的,甚至很可能,許多會話將並行運行,以便下載核心頁面,每個圖像或JavaScript src或其他任何可以爲了效率而遠離另一會話的內容。 – paxdiablo 2010-07-02 01:34:41