2011-08-30 91 views
2

我正在使用一个ASP.net MVC3.0应用程序,并保留当前HttpContext会话中的当前用户信息。HttpContext.Current.Session混淆在Asp.net MVC 3.0

据我所知HttpContext.Current是每当前request.Therefore,我的会话数据应该在新request.However清除后,我可以收到当前用户会话从数据请求通过存储HttpContext.Current要求。为了理解MVC 3.0中的会话管理,我做了这个样本用于测试目的。

我的问题:如何在当前请求后接收会话数据?我非常感谢你的帮助。

public static UserAccountDto CurrentUser 
    { 
     get 
     { 
      if (HttpContext.Current == null) 
       return null; 

      if (HttpContext.Current.Session[CurrentUserSessionVariable] != null) 
       return HttpContext.Current.Session[CurrentUserSessionVariable] as UserAccountDto; 

      return null; 
     } 

     private set { HttpContext.Current.Session[CurrentUserSessionVariable] = value; } 
    } 

回答

3

HttpContext.Current一样:

HttpContext.Current.Request 

最后一个是在每一个要求不同,第一个包含的成员像用户,会议,服务器等是发生在许多(但并非全部)在请求后处理相同的请求。

+0

。 http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx ...我很困惑。 – marvelTracker

+0

是的,但是这个_并不意味着如果你在两个不同的请求中得到它,里面的一切都与以前完全不同! –

+0

嗯..我同意了。谢谢 – marvelTracker

1

你所做的是正确的,你创建的会话变量将可用于创建它的所有请求。 HttpContext是您在网页开发中发现的最大对象之一,在场景背后有很多东西。你不会失去请求之间的会话的原因是因为服务器将保持它活着。根据微软的说法,他们会说“获取或设置当前HTTP请求的HttpContext对象”。在这种情况下,你会惊讶地发现会话使用了缓存的特定部分