当前位置:  开发笔记 > 后端 > 正文

为什么ASP.NET MVC会使用会话状态?

如何解决《为什么ASP.NETMVC会使用会话状态?》经验,为你挑选了3个好方法。

ASP.NET团队建议使用缓存而不是会话,我们在过去几年中停止使用会话来处理WebForm模型.所以我们通常在web.config中关闭会话


但是,现在当我使用此设置测试ASP.NET MVC应用程序时,它会SessionStateTempDataProvider在mvc框架内的类中抛出错误,它要求我打开会话状态,我做了并且它有效.查看它使用会话的来源:

// line 20 in SessionStateTempDataProvider.cs
Dictionary tempDataDictionary = 
httpContext.Session[TempDataSessionStateKey] as Dictionary; 

那么,为什么他们会在这里使用会话?我错过了什么?

================================================== ======

编辑对不起这篇文章不是故意讨论会话与缓存,而是在ASP.NET MVC的上下文中,我只是想知道为什么会话在这里使用.在这篇博文中,Scott Watermasysk也提到关闭会话是一个很好的做法,所以我只是想知道为什么我必须从这里开启使用MVC.



1> Craig Stuntz..:

Session用于TempData存储.TempData是一种高度有限的会话状态,它将持续到某个用户的下一个请求为止.(编辑在MVC 2+中,它会持续到下次读取为止.)TempData的目的是存储数据,然后执行重定向,并使存储的数据可用于您刚刚重定向的操作.

对TempData存储使用Session意味着已经处理Session的任何分布式缓存系统都适用于TempData.在TempData执行时避免直接使用Session有几个优点.一个是你不必自己清理会话; TempData将自行"过期".


通过在web.config中禁用并实现ITempDataProvider接口,可以禁用会话状态.
这在循环Web场配置中如何工作?有没有办法在MVC中关闭Session State/TempData?
它的工作方式与会话始终在服务器场上的工作方式相同.这在MSDN上有记录.最好的方法是使用分布式缓存,但您也可以使用"粘性会话".关于关闭会话,它就像任何其他ASP.NET应用程序一样.请参阅MSDN.然后就是不要使用TempData.也就是说,这样做就像通过斩首治疗痤疮.

2> Darin Dimitr..:

ASP.NET团队建议使用缓存而不是会话

@ ray247,你能为此提供参考吗?会话和缓存本质上是不同的,应根据应用程序要求使用.例如,将用户特定数据存储到高速缓存中可能导致不期望的行为.当然,如果您真的想避免使用会话,您可以提供自己的ITempDataProvider接口实现.


因为缓存是定义volatile.在某些情况下,您可以控制外部压力,例如内存压力,缓存可能会失效,从而丢失所有会话数据.

3> maxnk..:

嗯......可能你已经读过有关重物或相对很少被访问的物体的持久性 - 将它们放入缓存中肯定更好,但对于轻物体或每次请求所需的数据,没有比把它们放入Session.

如果您正确使用它们,会话并不邪恶.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有