Asp.Net mvc会话与缓存

时间:2011-03-25 09:23:00

标签: asp.net-mvc asp.net-mvc-2 session caching webforms

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

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

编辑:我创建了一个接受HttpSessionStateBase作为参数的SessionService,并且从Mvc中我将其称为:

SessionService _service = new SessionService(HttpContext.Session);

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

HttpSessionStateWrapper Session = new HttpSessionStateWrapper(HttpContext.Current.Session);
            SessionService _SessionRepository = new SessionService(Session);

3 个答案:

答案 0 :(得分:9)

在会话中为每个用户存储30个整数很好。

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

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

答案 1 :(得分:4)

  

会话似乎是我的选择   已附加webforms以显示   水晶报告和Session对象   webforms和MVC使用的是不同的:   Mvc使用HttpSessionStateBase和   webforms使用HttpSessionState。

HttpSessionStateBase是一个抽象类,它的实现只是原始HttpSessionState对象的包装器。因此,只要您保持在同一个应用程序中,MVC和WebForms之间的会话就完全相同,您就可以使用它来共享数据。因此,在您的场景中,会话似乎是一种持久化数据的正确方法。

答案 2 :(得分:0)

使用会话没有错。会好的。