Por que HttpContext.Current.Session é nulo no Global.asax?
Estou usando o VS2010 e criei um asp simples. aplicativo de formulários da web, usando o Development Server para testá-lo.
Tento armazenar dados do usuário - consultados no servidor sql - na sessão, pois não quero acessar o banco de dados em todas as solicitações. Estou usando os métodos 'Application_AuthenticateRequest' e 'Session_Start'.
Primeira rodada: AuthenticateRequest chamado. O seguinte código foi executado:
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;
}
}
A variável _current é um campo estático privado publicado por meio de uma propriedade estática. Na primeira rodada, a Sessão é nula, e acho que está ok porque o Session_Start ainda não foi chamado. O Session_Start fica assim:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
Na próxima rodada, o Session_Start não é chamado, é claro, mas no AuthenticateRequest não consigo acessar a sessão. O HttpContext.Current.Session é nulo e a referência this.Session lança um HttpException diz que "O estado da sessão não está disponível neste contexto".
No entanto, posso acessar a sessão a partir de qualquer um dos eventos page_load, mas é uma prática ruim que eu coloquei autenticação em cada page_load. Alguma idéia de como posso acessar a sessão?
Obrigado pelo conselho,
Peter