2013-04-08 78 views
5

我打算在MVC3中使用一個簡單的會話對象來維護像RecordIds這樣的狀態數據,而不是將它們傳遞到所有客戶端頁面,這很麻煩。將會話對象填充一次直到不再使用似乎簡單得多。在MVC中使用會話對象,它真的很糟糕嗎?

那麼這是可以接受的做法還是作弊?

非常感謝。

+1

我投票結束這個,因爲它會徵求專家意見和反對意見的辯論。它不適合QA。這就是說,有這樣的一些類似的問題:http://stackoverflow.com/questions/10181629/why-session-is-a-disaster-in-asp-net-mvc-application和http://stackoverflow.com/questions/6165241/asp-net-mvc-session – Jamiec 2013-04-08 11:48:57

回答

7

使用Session對象沒有任何問題。通常人們避免它們來減少服務器上的負載;但如果你是小心,不要試圖把大量的數據放在那裏,並沒有太多(多少取決於你的服務器),那麼這是一個可以接受的做法。

有關使用會話的潛在缺點一些信息退房the answerStill ok to use Session variables in ASP.NET mvc, or is there a better alternative for some things (like a cart)

+0

謝謝,很有幫助。我一直認爲它就像在編碼中使用「GoTo」語句一樣。似乎沒有在正確的背景下。 – SamJolly 2013-04-08 11:58:16

+0

購物車的好例子。實際上,我將數據傳遞給工作流程,但每個工作流程步驟都可能訪問另一個控制器來完成其工作。 – SamJolly 2013-04-08 11:59:59

6

就像在開發者的生活中的一切,用會話的權衡,以及恕我直言,它通常是一個糟糕的一個。

會話狀態不僅會導致服務器上的負載增加並且會產生可伸縮性障礙(這兩個問題都可以 - 部分地通過將狀態服務器或sql server存儲爲會話變量來解決),它有一個設計怪癖,大家都知道:它在會話上保持讀寫鎖定。 (http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx

這意味着默認情況下,同一用戶不能發出兩個併發請求。這種行爲是與asp.net相關的(不僅僅是asp.net MVC),但是由於asp.net MVC真的鼓勵你走下ajax之路,你會更頻繁地看到這個問題)。

您可以通過巧妙地使用readonly session state or selectively disabling it來避開這些問題,但是從我的經驗來說,這會產生開發開銷,因爲該屬性只能在類作用域中聲明,而不能用於特定的操作方法,這會導致您拆分邏輯單元通常會在一起。

總之,您的榮譽,asp.net會話狀態默認行爲是有問題的。儘可能避免使用它。

+1

您的證據已獲得您的好評!法院現在休會以結束其發現:) – SamJolly 2013-04-08 16:39:15

相關問題