В чем разница между сеансом и объектом 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.