36

为什么说我们不应该在 ASP.NET MVC 应用程序中使用 Session 变量?我遇到了这样的答案。在这种情况下,我将如何维护请求中的值,例如登录用户信息和与他的帐户关联的一些相关数据?

这是达林的回答。

为什么在 ASP.NET MVC 应用程序中使用 HttpContext.Current?永远不要使用它。即使在经典的 ASP.NET webforms 应用程序中,这也是邪恶的,但在 ASP.NET MVC 中,这是一场灾难,它使这个漂亮的 web 框架失去了所有乐趣。

4

2 回答 2

28

像 ASP.NET MVC 这样的框架的基本原则之一是它们是无状态的,就像 Web 一样。ASP.NET Web 窗体是在无状态环境上模仿有状态范式的尝试。换句话说, 这是一个谎言。

在 ASP.NET MVC 应用程序中使用 Session 变量有点像在马的头上绑一个角,并称它为独角兽。

于 2012-04-16T21:08:44.000 回答
7

您可以使用会话状态来持久化数据,TempData 功能默认使用 Session 来持久化数据。

您应该尽可能减少 session 的使用,原因是对所有请求的 session 进行锁定以防止 session 状态损坏,例如多个 Ajax 请求将因此而序列化。更多信息在这里

您可以使用替代方法在请求之间持久化数据,例如您可以使用CookieValueProvider,它是 MVC Futures 的一部分,用于将 cookie 数据绑定到模型。您也可以将数据作为隐藏字段保存在实际 DOM 中,但同样应该尽可能地最小化这些数据,因为数据的大小将反映在进出浏览器的网络流量中。

如果您的主存储很慢,我会考虑为您的 Web 应用程序使用另一个数据存储。例如 SQLServer CE 或嵌入式 RavenDB。

于 2012-04-16T23:59:23.330 回答