HttpContext.Current.Session null item

.net, asp.net, asp.net-mvc-3

Solution

sessionKey may be changing, you probably only need to do:

HttpContext.Current.Session["CurrentUser"]

Or the session may be expiring, check the timeout:

http://msdn.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx

Or you may be setting the session value from somewhere else, normally i control access to Session/Context object through one property

static readonly string SESSION_CurrentUser = "CurrentUser";

public static SiteUser Create() {     
 SiteUser.Current = new SiteUser();      
 return SiteUser.Current;
}

public static SiteUser Current {     
 get {         
  if (HttpContext.Current.Session == null || HttpContext.Current.Session[SESSION_CurrentUser] == null) {             
   throw new SiteUserAutorizationExeption();         
  }          
  return HttpContext.Current.Session[SESSION_CurrentUser] as SiteUser;     
 } 
 set {
  if (!HttpContext.Current.Session == null) {
   HttpContext.Current.Session[SESSION_CurrentUser] = value;
  }
 }
} 

Problem

i'm storing in HttpContext.Current.Session current user, SiteUser is single-tone class that presents current active siteuser, and when he logged i'm creating new SiteUser() in controller and in constructor adding him to the session: ``` public static SiteUser Create() { HttpContext.Current.Session[sessionKey] = new SiteUser(); return HttpContext.Current.Session[sessionKey] as SiteUser; } ``` then, with every request to the server services i'm check is user available in session: ``` public static SiteUser Current { get { if (HttpContext.Current.Session == null || HttpContext.Current.Session[sessionKey] == null) { throw new SiteUserAutorizationExeption(); } return HttpContext.Current.Session[sessionKey] as SiteUser; } } ``` otherwise i'm generate non-auth-user exception and redirect him to the logon page. but sometimes HttpContext.Current.Session[sessionKey] is null, but HttpContext.Current.Session doesn't null and FormsAuthenticationTicket is available and Expired property is also false. can somebody help me, why HttpContext.Current.Session[sessionKey] can be null? UPD: webconfig session settings: `<sessionState mode="InProc" timeout="20" />` UPD: sessionKey is: `public const string sessionKey = "SiteUser";` UPD2: i'm forget to add, that in session also stored Culture settings: ``` HttpContext.Current.Session["Culture"] ``` and when exception hits, that HttpContext.Current.Session[sessionKey] is null, culture-item isn't UPD3: i have downloaded symbol tables of source .NET Framework and set breakpoints at SessionStateItemCollection on changing collection items. and i resolved some mistakes: 1) all collection items are null — "culture" is setting up after 2) it happens at the session end event i can't understand how it can be, because at web.config session timeout is set 20

Original source