model-view-controller - MVC 中的 session

标签 model-view-controller

session 处理在 MVC 的整体概念中处于什么位置?模型还是 Controller ?

最佳答案

SessionState 的目的是将有关用户 session 的数据从一个 HttpRequest 保存到下一个 HttpRequest。在某些情况下,这是比手动实现 cookie 或为 session 信息创建数据存储并传递标识符更简单的解决方案。 MVC 执行此操作的方法是使用 TempData,它包装了 SessionState。这意味着可能没有必要直接访问 SessionState ,除非您要覆盖某些核心基础设施。我认为模型是数据的一种更具隐喻性的表示。在模型中使用 session 数据似乎并不完全正确,因为模型可能代表一些业务逻辑,而 SessionState 会不必要地复杂化。 System.Web.Mvc提供了很多机制,允许我们维护状态而不必直接使用HttpContext。这些机制作为 ControllerContextActionFilter 过滤上下文、ExceptionContextAuthorizationContextModelBindingContextRouteDataViewContext。它们有助于将 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/

相关文章:

css - 带或不带 `.min` 的样式表引用

javascript - 如何使 jQuery .load() 将返回的数据附加到容器内而不是重写它?

objective-c - iOS 中具有多个类的 MVC 设计模式

java - 在MVC架构中, `View`可以访问模型吗?

javascript - 为什么 AngularJS 在 HTML 中打印双引号

java - Spring中将Controller1的方法调用到Controller2的另一个方法中

java - 我的 MVC 监听器如何区分不同的按钮

c# - 如何在 ASP.NET Core 2.0 Controller 上同时拥有 'get by id' 和 'get by name' 路由?

javascript - 如何在不绑定(bind)的情况下更改为箭头函数?

javascript - Yii::app() 方法未定义