我打算在MVC3中使用一個簡單的會話對象來維護像RecordIds這樣的狀態數據,而不是將它們傳遞到所有客戶端頁面,這很麻煩。將會話對象填充一次直到不再使用似乎簡單得多。在MVC中使用會話對象,它真的很糟糕嗎?
那麼這是可以接受的做法還是作弊?
非常感謝。
我打算在MVC3中使用一個簡單的會話對象來維護像RecordIds這樣的狀態數據,而不是將它們傳遞到所有客戶端頁面,這很麻煩。將會話對象填充一次直到不再使用似乎簡單得多。在MVC中使用會話對象,它真的很糟糕嗎?
那麼這是可以接受的做法還是作弊?
非常感謝。
使用Session對象沒有任何問題。通常人們避免它們來減少服務器上的負載;但如果你是小心,不要試圖把大量的數據放在那裏,並沒有太多(多少取決於你的服務器),那麼這是一個可以接受的做法。
有關使用會話的潛在缺點一些信息退房the answer到Still ok to use Session variables in ASP.NET mvc, or is there a better alternative for some things (like a cart)
就像在開發者的生活中的一切,用會話的權衡,以及恕我直言,它通常是一個糟糕的一個。
會話狀態不僅會導致服務器上的負載增加並且會產生可伸縮性障礙(這兩個問題都可以 - 部分地通過將狀態服務器或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會話狀態默認行爲是有問題的。儘可能避免使用它。
您的證據已獲得您的好評!法院現在休會以結束其發現:) – SamJolly 2013-04-08 16:39:15
我投票結束這個,因爲它會徵求專家意見和反對意見的辯論。它不適合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