Sto usando VS2010 e ho creato un semplice asp. applicazione di moduli Web, utilizzando Development Server per testarlo.
Cerco di memorizzare i dati utente - interrogati dal server sql - nella sessione, dal momento che non desidero accedere al database in ogni richiesta. Sto usando i metodi 'Application_AuthenticateRequest' e 'Session_Start'.
Primo round: AuthenticateRequest chiamato. Il seguente codice ha funzionato:Perché HttpContext.Current.Session è null in 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 variabile _current è un campo statico privato pubblicato attraverso una proprietà statica. Nel primo round la Sessione è nullo, e penso che sia ok perché il Session_Start non è stato ancora chiamato. Il Session_Start assomiglia a questo:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
Nel prossimo turno il Session_Start non è chiamato, naturalmente, ma nel AuthenticateRequest che non può accedere alla sessione. HttpContext.Current.Session è null e il riferimento this.Session lancia una HttpException dice che "lo stato della sessione non è disponibile in questo contesto".
Tuttavia, posso accedere alla sessione da qualsiasi evento page_load ma è una cattiva pratica. Penso di aver inserito l'autenticazione ogni page_load. Qualche idea su come posso accedere alla Sessione?
Grazie per la consulenza,
Péter
+1 - non ho letto la domanda iniziale abbastanza da vicino. –
Grazie. Era la soluzione. –
@ Torbjörn Hansson: A volte è nulla, hai qualche idea del perché? – Homam