ASP.NET MVC: la sesión es nula

Tengo una aplicación MVC3 en .net4 que está trabajando en el Entorno dev, pero no en la producción.
En la producción, registré el ID de sesión y es el mismo en el momento en que configuro y obtengo de la sesión.

Cuando trato de obtener la sesión obtengo una Null Exception .

Así es como accedo a la sesión:

 public static class HandlersHttpStorage { public static string TestSession { get { return HttpContext.Current.Session["time"];//This is null } set { HttpContext.Current.Session.Add("time", value);//DateTime.Now.ToString() } } } 

Lo que me preocupa es que el comportamiento en la producción sea diferente al desarrollo, aunque el web.config sea el mismo.

Solución 1:

Enlace: HttpContext.Current.Session es nulo cuando las solicitudes de enrutamiento

Lo tengo. Bastante estúpido, en realidad. Funcionó después de que eliminé y agregué el SessionStateModule así:

  ...  ...    ...    

Simplemente agregarlo no funcionará ya que “Session” ya debería haberse definido en machine.config .

Ahora, me pregunto si eso es lo habitual. Seguramente no parece así ya que parece tan crudo …

Solución 2:

Enlace: HttpContext.Current.Session elemento nulo

sessionKey puede estar cambiando, probablemente solo necesites hacer:

 HttpContext.Current.Session["CurrentUser"] 

O la sesión puede estar expirando, verifique el tiempo de espera:

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

O puede establecer el valor de la sesión desde otro lugar, normalmente controlo el acceso al objeto de sesión / contexto a través de una propiedad

 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; } } } 

Otra posible causa / solución es que IE no guarda cookies si el nombre de dominio tiene un guión bajo (porque, estrictamente hablando, los nombres de dominio no pueden tener guiones bajos, por lo que probablemente solo lo encuentre en el desarrollo), por ejemplo, http://my_dev_server/DoesntWork . Chrome o Firefox deberían funcionar en este escenario, y si cambias el nombre de dominio que estás usando para no tener un problema de subrayado resuelto.

Árbitro: