Asp.Net mvc会话与缓存

Muh*_*hid 3 asp.net-mvc session caching webforms asp.net-mvc-2

我们一直在开发asp.net mvc应用程序.只要用户登录,我们就必须维护一些用户特定的信息.对我来说有什么选择?缓存在站点的所有用户之间共享.Session似乎是选项,但我附加了webforms以显示Crystal Reports和webforms使用的Session对象和MVC是不同的:Mvc使用HttpSessionStateBase而webforms使用HttpSessionState.

我应该在会话中保留多少信息(我有一个大约30个整数/用户的数组)?我应该将它保留在会话中,还是应该使用会话和缓存的某种组合?

编辑:我创建了一个接受HttpSessionStateBase作为参数的SessionService,并从Mvc我调用它:

SessionService _service = new SessionService(HttpContext.Session);
Run Code Online (Sandbox Code Playgroud)

它返回HttpSessionStateBase但是Darin建议它是抽象类,所以它也可以使用SessionStateWrapper实现.在Web表单场景中,我正在使用类似的东西

HttpSessionStateWrapper Session = new HttpSessionStateWrapper(HttpContext.Current.Session);
            SessionService _SessionRepository = new SessionService(Session);
Run Code Online (Sandbox Code Playgroud)

Ali*_*tad 9

在会话中为每个用户存储30个整数是可以的.

但现实是,使用缓存可以解决您需要注意的问题:

  • 会话状态 - 除非使用状态服务器或SQL服务器 - 将是易失性的并且可能通过回收丢失.此外,如果您将站点移动到多个服务器,如果使用volatile会话,则必须在所有站点上填充会话.
  • 许多ASP NET功能(如身份验证)都是基于cookie而不是基于会话的.你需要意识到它们不能同时工作.例如,如果您使用表单身份验证并重新启动站点或回收应用程序,则在丢失所有会话信息时,用户将保持身份验证状态.