2010-07-28 147 views
6

我正在使用一個asp.net應用程序,它將大部分數據存儲在數據庫中而不是會話。我想知道每種方式的優缺點,哪種方式更好。例如,你有一個非常繁忙的站點,而不是在會話中存儲用戶特定的變量,有一個稱爲用戶數據的數據庫表,它可以存儲所有用戶特定的數據,這些數據可以通過查詢數據庫從任何頁面訪問。哪一種更好的方法,會話或數據庫?在asp.net中存儲數據庫與會話的用戶變量

回答

2

有趣的問題。如果它的數據在會話中不重要(比如說,查看最後一頁) - >會話。如果它的數據應該是持久的(比如密碼) - >數據庫。有趣的案例和你可能提到的那個:應該是持久化的數據,但也經常使用(比如說,用戶名)。從這些角度來看,我傾向於從數據庫中將這些值複製到會話中,以便我可以在沒有數據庫訪問的情況下工作,而無需在頁面中執行簡單任務。

3

當AppDomain重置時,存儲在會話狀態中的任何內容都將消失。

你可以通過使用out-of-proc會話狀態處理程序來避免這種情況,但這並不比數據庫好。

3

會議(但它取決於很多會話配置的):

  • 沒有數據庫訪問,或更低。
  • 臨時存儲:至少在會話結束時,您可能會丟失信息。
  • 也許存在一些安全問題,具體取決於您存儲會話信息的位置
  • 不共享:如果您使用的是服務器場,則可能有問題,但一臺服務器可能無法訪問其他服務器會話。
  • 如果客戶端禁用了cookie,可能無法正常工作。

數據庫:

  • ,因爲如果你需要在每個頁面上的信息,每次回發的數據庫流量。
  • 永久性存儲。
  • 未與客戶端存儲信息(cookie ...)。
  • 共享:可從Web場中的任何服務器訪問的數據。

請注意,您可以將會話信息存儲在數據庫中。這就是爲什麼我在Session部分使用「may」這個詞。 請參閱here some session configuration and possibilities

2

在很多情況下,我使用Session來存儲有關...呃...「會話」的臨時數據。在ASP.NET中,會話是可配置的。您可以使用使用服務器內存的in-proc(默認)。您還可以將會話配置爲使用數據庫或會話管理工具(以防服務器內存出現問題或移至羣集/服務器場環境)。

會話是暫時的。當您真正存儲有關正在使用您的應用程序的用戶的數據時,這非常棒。當用戶離開應用程序並且他/她的會話到期時,內存被釋放。你不必手動清除任何東西。

會話使用服務器的內存。只要你有足夠的內存,並且你不在服務器集羣上,這個效果很好。內存很快,因此在會話中獲取和設置數據非常快,並且使用零網絡帶寬。

說了這麼多,在我的一些應用程序中,我將會話配置爲使用SQL。它基本上與直接使用數據庫相同,但我不必處理DAL ......只需讓框架爲您工作即可。