Разница между сеансом и HttpContext.Current.Session

В чем разница между сеансом и объектом HttpContext.Current.Session?

Ответ 1

Немного поздно здесь, но вот что-то, что я только что обнаружил.

@Phillipe Leybaert и @CSharpAtl неверны. Свойство HttpApplication Session имеет другое поведение, чем свойство свойства HttpContext.Current.Session. Они оба вернут ссылку на тот же HttpSessionState экземпляр , если один из них доступен. Они отличаются тем, что они делают, когда нет экземпляра HttpSessionState, доступного для текущего запроса.

Не все HttpHandler предоставляют состояние сеанса. Для этого HttpHandler должен реализовать [один или оба?] Интерфейсы маркеров IRequiresSessionState или IReadOnlySessionState.

HttpContext.Current.Session просто возвращает null, если сеанс недоступен.

Реализация свойства Session HttpApplication вызывает сообщение HttpException с сообщением Session state is not available in this context., а не возвращает ссылку null.

Некоторые примеры HttpHandlers, которые не реализуют сеанс, являются обработчиками по умолчанию для обычно статических ресурсов, таких как файлы изображений и CSS. Любая ссылка на свойство HttpApplication Session в таких случаях (как в обработчиках событий global.asax) приведет к вызову HttpException.

Излишне говорить, что неожиданное HttpException предоставляет WTF?! если вы этого не ожидаете.

Свойство Session класса HttpApplication реализовано таким образом (из Reflector):

[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public HttpSessionState Session
{
  get
  {
    HttpSessionState session = null;

    if (this._session != null)
    {
        session = this._session;
    }
    else if (this._context != null)
    {
        session = this._context.Session;
    }

    if (session == null)
    {
        throw new HttpException(SR.GetString("Session_not_available"));
    }

    return session;
  }
}

Ответ 2

Нет никакой разницы.

Получатель для страницы. Сеанс возвращает контекстный сеанс.

Ответ 3

Ничего сеанса просто не указывает на текущий сеанс HttpContext.