Я использую VS2010 и создал простой Asp. приложение веб-форм, использующее сервер разработки для его проверки.
Я пытаюсь сохранить пользовательские данные - запрашиваемые с сервера sql - в сеансе, поскольку я не хочу получать доступ к базе данных при каждом запросе. Я использую методы Application_AuthenticateRequest и Session_Start.
Первый раунд:
AuthenticateRequest вызван. Выполнен следующий код:
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;
}
}
Переменная _current является частным статическим полем, опубликованным через статическое свойство.
В первом раунде Session является нулевым, и я думаю, что это нормально, потому что Session_Start еще не вызван.
Session_Start выглядит так:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
В следующем раунде Session_Start, конечно, не вызывается, но в запросе AuthenticateRequest я не могу получить доступ к сеансу. HttpContext.Current.Session имеет значение null, а ссылка this.Session создает исключение HttpException, в котором говорится, что «состояние сеанса недоступно в этом контексте».
Однако я могу получить доступ к Session из любого из событий page_load, но это плохая практика, я думаю, что я ставлю аутентификацию каждую page_load.
Любая идея, как я могу получить доступ к сессии?
Спасибо за совет,
Петер