0
A
回答
4
有幾個原因讓我有時會將會話數據存儲在數據庫中。這裏是最大的二:共享服務器如果你是一個共享的服務器上運行的
- 安全問題,有機會,很容易對服務器的其他用戶他們的方式染指到臨時目錄並有權訪問您在那裏存儲的會話數據。這不是太常見,但它可以發生。
- 使用多臺服務器如果您正在升級並使用多臺服務器,最好將會話數據存儲在數據庫中。這樣,整個服務器堆棧(或者服務器場中的數據很容易獲得)取決於你的數據量。這也可以通過一個平面文件系統來實現,但使用數據庫通常是一個更優雅,簡單的解決方案。
我能想到不使用數據庫的唯一的事情就是您將運行查詢的數量。對於每個頁面加載,您將有額外的查詢來收集會話數據。但是,一個小的額外查詢不應該有太大的區別。上面提到的兩點超過了這個小的成本。
希望有所幫助。
0
在無法控制誰可以訪問存儲會話文件的目錄的共享主機上。在這種情況下,在DB中存儲會話可以提供更好的安全性。
而且一個場景與我沒有經驗,不過我相信這是一個現實的情況:
在一個loadbalanced服務器農場,一個用戶的後續請求可以出動多臺服務器。在這種情況下,您可以選擇有一箇中央數據庫服務器。在這種情況下,如果您沒有這樣一個集中的會話存儲庫,用戶的會話數據就會丟失,因爲他們可以根據請求切換服務器。
0
有當您使用多臺服務器的巨大差異,具有負載平衡mecanism並不能保證一個給定的使用將始終發送到同一臺服務器:基於文件
- 會話,如果用戶負載平衡到與前一頁服務器不同的服務器,則包含其會話的文件將不會被找到(因爲它在另一臺服務器上),並且他將不會有他的會話數據
- 使用基於數據庫或基於memcached的會話時,會話數據將可以從任何服務器上獲得 - 實際上這很不錯,在這種情況下。
還有,當你使用的是一些共同主辦的差異:與基於文件的會話,如果這些被放置在服務器的「temporaty」目錄(如/ tmp)中,任何人都可以閱讀您的會議文件,取決於服務器的配置。使用基於數據庫的會話時,此問題不存在,因爲每個用戶都有不同的數據庫和數據庫用戶。
0
除了上述職位:
- 數據庫會話(當會話表存儲器類型的)更快。
- 使用基於文件的會話時,會話文件被鎖定,直到腳本結束。因此,用戶不能同時在服務器上同時運行腳本。例如,在編寫下載服務器時,這很重要。用戶下載文件,腳本向他發送文件,將會話文件鎖定。用戶不能同時瀏覽文件存檔的內容。
相關問題
- 1. 「會話」不會在目前情況下
- 2. 在哪些情況下使用定位會比浮動更好?
- 3. 在不擴展用戶會話的情況下調用asmx webservice
- 4. 在沒有會話的情況下使用彈簧會話範圍
- 5. 在不使用會話的情況下獲取值
- 6. 在意外情況下關閉會話
- 7. 在不重置當前用戶會話的情況下創建新用戶
- 8. 會話狀態在此情況下不可用 - 在Global.asax中
- 9. 爲什麼Facebook不會使用_escaped_fragment_而不是#!在某些情況下?
- 10. 在不使用Cookie的情況下維護會話並且不使用URL
- 11. 什麼使用,而不是會話?
- 12. 在哪些情況下使用正則表達式更好?
- 13. 在不破壞現有會話的情況下更改Django會話引擎
- 14. 如何在沒有http會話的情況下使用CDI- @ SessionScoped
- 15. 除了URL重寫,還有哪些選項可用於在不使用cookie的情況下維護會話?
- 16. asp.net和asp之間的會話傳輸在soome的情況下工作,在某些情況下不是
- 17. 在哪些情況下是我最好使用像沙發或Mongo的數據塊,而不是傳統的RDBMS
- 18. 如何在java用戶不活動的情況下過期瀏覽器會話?
- 19. Spring Boot livereload在不丟失用戶會話數據的情況下
- 20. 在堆上分配時,哪些情況會發生「自動」清理(如果有的話),以及在哪些情況下不會?
- 21. 在rails中,如何在給定會話標識的情況下終止會話?
- 22. 即使在會話不可用的情況下Action類對象如何可用?
- 23. Codeigniter本地會話或ci會話庫
- 24. 會話而不是意見
- 25. MySQL而不是PHP會話
- 26. 是否可以在沒有Redis的情況下使用Spring Boot會話?
- 27. 在哪些情況下,C#中不會執行finally塊?
- 28. Django:在不使用語言會話/ cookie的情況下翻譯字符串
- 29. 在不使用會話的情況下創建可伸縮的ASP.Net MVC網站
- 30. JSF如何在不使用會話範圍的情況下填充新頁面?