попробуйте использовать приведенный ниже код в page_Load

ользую 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, в котором говорится, что «состояние сеанса недоступно в этом контексте».

Однако я могу получить доступ к сеансу из любого события page_load, но это плохая практика, я думаю, что я ставлю аутентификацию каждую page_load. Любая идея, как я могу получить доступ к сессии?

Спасибо за совет,
Питер

Ответы на вопрос(2)

Ваш ответ на вопрос