MVC 5会话和/或高速缓存数据

问题描述:

我编码的MVC 5互联网应用,当用户登录时,我想日志存储在细节,使我可以检索任何类这些细节。MVC 5会话和/或高速缓存数据

我做了一些研究,我可以缓存数据,或者这些数据存储在一个会话。因为当用户登录,并且是唯一相关的登录用户数据只设置,我认为我应该使用下面的代码:

Session[key] = data; 

有什么缺点,或使用上面的代码?会话数据是否超时,或者在用户关闭浏览器和/或注销之前是否持续存在?

另一种选择是使用下面的代码:

System.Web.HttpRuntime.Cache[key] = data; 

是否有使用上面的代码时,我应该考虑什么优势?我目前倾向于使用Session[key] = data,因为数据仅与登录用户相关,并且不是应用程序范围。

在此先感谢。

会话是每个用户/会话,而缓存是每个应用程序。所以如果我理解的很好,缓存不会被用于你,不是吗?

会话到期时,用户关闭会话,或者您可以在不登录或者用户创建一个会话。您可以在web.config上设置会话的最长时间。当用户关闭浏览器时会话关闭。

如果你想浏览器关闭之后也可在会议上,你必须混合饼干和会话。 Cookies存储在客户端的浏览器中,可以托管sesssion的Id,但我不会推荐它。

+0

缓存做工作,做会议,我决定使用哪一个。会话何时到期? – user3736648 2014-12-09 13:25:57

+0

@ user373648我已经更新了我的答案 – clement 2014-12-09 14:10:08

鉴于您的问题中指定的要求,我相信您最好的方法是使用会话。您所描述的内容正是会话的完美之处 - 在访问持续时间期间保留经常访问的用户特定数据。

会话当用户关闭浏览器,或之后,可以通过你的应用程序指定超时到期。

至于使用会话对象,直接从控制器中引用Session对象,我强烈建议您查看使用IoC容器(如StructureMap)将会话注入到依赖于它们的类(如控制器或服务)。这使您可以针对接口而不是实现进行编程,并使代码更具可测试性和可维护性。

这里有来自blog post采取一个简单的例子一个写了关于这个问题的地方IUserInformation包含用户的会话数据:

public class UserDetailController : Controller { 

    private readonly IUserInformation userInformation; 

    public void ExampleLoginController(IUserInformation userInformation) { 
     this.userInformation = userInformation; 
    } 

    [HttpPost] 
    public ActionResult ViewProfile() 
    { 
     ... 
     string emailAddress = this.userInformation.EmailAddress; 
     ... 
    } 
}