代码之家  ›  专栏  ›  技术社区  ›  bcosca

MVC中的会话[已关闭]

  •  2
  • bcosca  · 技术社区  · 14 年前

    会话处理在MVC的总体概念中是什么?模型还是控制器?

    2 回复  |  直到 14 年前
        1
  •  2
  •   smartcaveman    14 年前

    SessionState的目的是将用户会话的数据从一个HttpRequest持久化到下一个HttpRequest。在某些情况下,这是一个比手动实现cookies或为会话信息创建数据存储并传递标识符更容易的解决方案。MVC的方法是 TempData ,它包装SessionState。这意味着,除非重写某些核心基础结构,否则可能不需要直接访问SessionState。我认为模型是一种更具隐喻性的数据表示。在模型中使用会话数据似乎并不完全正确,因为模型可能表示一些业务逻辑,因此会话状态将不必要地复杂化。Mvc提供了许多机制,允许我们在不直接使用HttpContext的情况下维护状态。这些机制包含为 ControllerContext ,和 ActionFilter 过滤上下文 ExceptionContext ,和 AuthorizationContext ,和 ModelBindingContext , RouteData ViewContext . 它们有助于将可能存储在会话状态集合中的一堆不同的内容分离到逻辑上更加分离的分区中。

    TempData可从ControllerContext和ViewContext获得。这是会话状态的访问点功能。如果您想控制这些数据的处理和写入,并且不确定在哪里,那么操作过滤器是一个很好的注入点,因为它们将该关注点排除在主要的面向业务的控制器操作之外。本文探讨如何使用ActionFilter自动在请求之间保持模型状态: http://blog.jorritsalverda.nl/2010/03/10/maintainable-mvc-post-redirect-get-pattern/ . 我想这可能会有帮助。这个问题不是很具体。。。如果我没有直接回答你的问题,请澄清。

        2
  •  1
  •   user45886user45886    14 年前

    我更喜欢将它们保存在控制器级别,或者隐藏在自定义操作过滤器或模型绑定器中。

    会话状态实际上是一个web客户机概念,为了分层起见,我更喜欢将它们排除在模型之外。或者至少我会在自己的会话或上下文接口中包装它。