ASP.NET团队建议使用缓存而不是会话,我们在过去几年中停止使用会话来处理WebForm模型.所以我们通常在web.config中关闭会话
但是,现在当我使用此设置测试ASP.NET MVC应用程序时,它会SessionStateTempDataProvider
在mvc框架内的类中抛出错误,它要求我打开会话状态,我做了并且它有效.查看它使用会话的来源:
// line 20 in SessionStateTempDataProvider.cs DictionarytempDataDictionary = httpContext.Session[TempDataSessionStateKey] as Dictionary ;
那么,为什么他们会在这里使用会话?我错过了什么?
================================================== ======
编辑对不起这篇文章不是故意讨论会话与缓存,而是在ASP.NET MVC的上下文中,我只是想知道为什么会话在这里使用.在这篇博文中,Scott Watermasysk也提到关闭会话是一个很好的做法,所以我只是想知道为什么我必须从这里开启使用MVC.
Session用于TempData存储.TempData是一种高度有限的会话状态,它将持续到某个用户的下一个请求为止.(编辑在MVC 2+中,它会持续到下次读取为止.)TempData的目的是存储数据,然后执行重定向,并使存储的数据可用于您刚刚重定向的操作.
对TempData存储使用Session意味着已经处理Session的任何分布式缓存系统都适用于TempData.在TempData执行时避免直接使用Session有几个优点.一个是你不必自己清理会话; TempData将自行"过期".
ASP.NET团队建议使用缓存而不是会话
@ ray247,你能为此提供参考吗?会话和缓存本质上是不同的,应根据应用程序要求使用.例如,将用户特定数据存储到高速缓存中可能导致不期望的行为.当然,如果您真的想避免使用会话,您可以提供自己的ITempDataProvider接口实现.
嗯......可能你已经读过有关重物或相对很少被访问的物体的持久性 - 将它们放入缓存中肯定更好,但对于轻物体或每次请求所需的数据,没有比把它们放入Session.
如果您正确使用它们,会话并不邪恶.