session 处理在 MVC 的整体概念中处于什么位置?模型还是 Controller ?
最佳答案
SessionState 的目的是将有关用户 session 的数据从一个 HttpRequest 保存到下一个 HttpRequest。在某些情况下,这是比手动实现 cookie 或为 session 信息创建数据存储并传递标识符更简单的解决方案。 MVC 执行此操作的方法是使用 TempData,它包装了 SessionState。这意味着可能没有必要直接访问 SessionState ,除非您要覆盖某些核心基础设施。我认为模型是数据的一种更具隐喻性的表示。在模型中使用 session 数据似乎并不完全正确,因为模型可能代表一些业务逻辑,而 SessionState 会不必要地复杂化。 System.Web.Mvc提供了很多机制,允许我们维护状态而不必直接使用HttpContext。这些机制作为 ControllerContext
、ActionFilter
过滤上下文、ExceptionContext
、AuthorizationContext
、 ModelBindingContext
、RouteData
和 ViewContext
。它们有助于将 session 状态集合中存储的一堆不同的东西分开,这些东西在逻辑上更独立。
TempData 可从 ControllerContext 和 ViewContext 获取。这是您对 session 状态功能的访问点。如果您想控制这些数据的处理和写入,并且不确定在哪里,操作过滤器是一个非常好的注入(inject)点,因为它们将这种关注排除在主要的面向业务的 Controller 操作之外。本文探讨了如何使用 ActionFilter 自动跨请求保留模型状态:http://blog.jorritsalverda.nl/2010/03/10/maintainable-mvc-post-redirect-get-pattern/ 。我想这可能会有帮助。这个问题不是很具体...如果我没有直接解决您的问题,请澄清。
关于model-view-controller - MVC 中的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4245406/