2009-09-22 40 views

回答

4

有幾個原因讓我有時會將會話數據存儲在數據庫中。這裏是最大的二:共享服務器如果你是一個共享的服務器上運行的

  1. 安全問題,有機會,很容易對服務器的其他用戶他們的方式染指到臨時目錄並有權訪問您在那裏存儲的會話數據。這不是常見,但它可以發生。
  2. 使用多臺服務器如果您正在升級並使用多臺服務器,最好將會話數據存儲在數據庫中。這樣,整個服務器堆棧(或者服務器場中的數據很容易獲得)取決於你的數據量。這也可以通過一個平面文件系統來實現,但使用數據庫通常是一個更優雅,簡單的解決方案。

我能想到使用數據庫的唯一的事情就是您將運行查詢的數量。對於每個頁面加載,您將有額外的查詢來收集會話數據。但是,一個小的額外查詢不應該有太大的區別。上面提到的兩點超過了這個小的成本。

希望有所幫助。

0

在無法控制誰可以訪問存儲會話文件的目錄的共享主機上。在這種情況下,在DB中存儲會話可以提供更好的安全性。

而且一個場景與我沒有經驗,不過我相信這是一個現實的情況:
在一個loadbalanced服務器農場,一個用戶的後續請求可以出動多臺服務器。在這種情況下,您可以選擇有一箇中央數據庫服務器。在這種情況下,如果您沒有這樣一個集中的會話存儲庫,用戶的會話數據就會丟失,因爲他們可以根據請求切換服務器。

0

有當您使用多臺服務器的巨大差異,具有負載平衡mecanism並不能保證一個給定的使用將始終發送到同一臺服務器:基於文件

  • 會話,如果用戶負載平衡到與前一頁服務器不同的服務器,則包含其會話的文件將不會被找到(因爲它在另一臺服務器上),並且他將不會有他的會話數據
  • 使用基於數據庫或基於memcached的會話時,會話數據將可以從任何服務器上獲得 - 實際上這很不錯,在這種情況下。

還有,當你使用的是一些共同主辦的差異:與基於文件的會話,如果這些被放置在服務器的「temporaty」目錄(如/ tmp)中,任何人都可以閱讀您的會議文件,取決於服務器的配置。使用基於數據庫的會話時,此問題不存在,因爲每個用戶都有不同的數據庫和數據庫用戶。

0

除了上述職位:

  • 數據庫會話(當會話表存儲器類型的)更快。
  • 使用基於文件的會話時,會話文件被鎖定,直到腳本結束。因此,用戶不能同時在服務器上同時運行腳本。例如,在編寫下載服務器時,這很重要。用戶下載文件,腳本向他發送文件,將會話文件鎖定。用戶不能同時瀏覽文件存檔的內容。
相關問題