为什么说我们不应该在 ASP.NET MVC 应用程序中使用 Session 变量?我遇到了这样的答案。在这种情况下,我将如何维护请求中的值,例如登录用户信息和与他的帐户关联的一些相关数据?
这是达林的回答。
为什么在 ASP.NET MVC 应用程序中使用 HttpContext.Current?永远不要使用它。即使在经典的 ASP.NET webforms 应用程序中,这也是邪恶的,但在 ASP.NET MVC 中,这是一场灾难,它使这个漂亮的 web 框架失去了所有乐趣。
像 ASP.NET MVC 这样的框架的基本原则之一是它们是无状态的,就像 Web 一样。ASP.NET Web 窗体是在无状态环境上模仿有状态范式的尝试。换句话说, 这是一个谎言。
在 ASP.NET MVC 应用程序中使用 Session 变量有点像在马的头上绑一个角,并称它为独角兽。
您可以使用会话状态来持久化数据,TempData 功能默认使用 Session 来持久化数据。
您应该尽可能减少 session 的使用,原因是对所有请求的 session 进行锁定以防止 session 状态损坏,例如多个 Ajax 请求将因此而序列化。更多信息在这里
您可以使用替代方法在请求之间持久化数据,例如您可以使用CookieValueProvider,它是 MVC Futures 的一部分,用于将 cookie 数据绑定到模型。您也可以将数据作为隐藏字段保存在实际 DOM 中,但同样应该尽可能地最小化这些数据,因为数据的大小将反映在进出浏览器的网络流量中。
如果您的主存储很慢,我会考虑为您的 Web 应用程序使用另一个数据存储。例如 SQLServer CE 或嵌入式 RavenDB。