Estoy usando VS2010 y he creado un asp simple. aplicación de formularios web, utilizando el servidor de desarrollo para probarlo.
Intento almacenar datos de usuario - consultados desde el servidor sql - en la sesión, ya que no quiero acceder a la base de datos en cada solicitud. Estoy usando los métodos 'Application_AuthenticateRequest' y 'Session_Start'.
Primera ronda: AuthenticateRequest llamado. Se ejecutó el siguiente código:¿Por qué HttpContext.Current.Session es nulo en Global.asax?
public static void Initialize(string login_name, bool force_refresh)
{
HttpSessionState Session = HttpContext.Current.Session;
object o = Session == null ? null : Session["EMPLOYEE_DATA"];
if (force_refresh || o == null || o.GetType() != typeof(Employee) || (o as Employee).login_name!= login_name)
{
_current = UIManager.GetEmployee(login_name);
if (Session != null)
{
Session["EMPLOYEE_DATA"] = _current;
}
}
else
{
_current = (Employee)o;
}
}
La variable _current es un campo privado estático publicado a través de una propiedad estática. En la primera ronda, la sesión es nula, y creo que está bien porque todavía no se ha llamado al Session_Start. El Session_Start se parece a esto:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
En la siguiente ronda del Session_Start no se llama, por supuesto, pero en el AuthenticateRequest no puede acceder a la sesión. El HttpContext.Current.Session es nulo y el this.Session reference throw a HttpException dice que "El estado de la sesión no está disponible en este contexto".
Sin embargo, puedo acceder a la sesión desde cualquiera de los eventos page_load, pero es una mala práctica, creo que puse autenticación cada page_load. ¿Alguna idea de cómo puedo acceder a la sesión?
Gracias por el consejo,
Péter
+1 - No he leído la pregunta original lo suficientemente cerca. –
Gracias. Fue la solución. –
@ Torbjörn Hansson: A veces es nulo, ¿tienes alguna idea de por qué? – Homam