Как использовать состояние сеанса ASP.NET в HttpHandler?

У меня есть HttpHandler, который запускается на клиентской странице (кросс-домен, а не на нашем сервере IIS и т. Д.), И когда они нажимают на нашу встроенную ссылку, он запускает обработчик на нашем сервере. Пока все работает нормально.

Сейчас я пытаюсь использовать объект System.Web.HttpContext.Session, но он имеет значение null. Я думаю, что это null, потому что у нас нет сеанса, пока не будет вызван наш HttpHandler? И несколько вызовов обработчика создадут новый сеанс для каждого вызова? Если это так, разве MS просто отключила объект сеанса при вызове HttpHandler? Кто-нибудь может это подтвердить?

Если это так, что вы делаете, чтобы поддерживать состояние между вызовами? Какой-то объект данных на основе SQL? Файл?

TIA


person Keith Barrows    schedule 09.07.2009    source источник


Ответы (3)


Пусть ваш HttpHandler реализует интерфейс IRequiresSessionState. Это позволит использовать состояние сеанса. IRequiresSessionState можно найти в пространстве имен System.Web.SessionState.

person Michael Morton    schedule 09.07.2009
comment
@ Майкл не подумал бы об этом через миллион лет, спасибо :) - person eran otzap; 24.09.2011
comment
Реализация сработала для меня: открытый класс BasicHandler реализует IHttpHandler реализует IRequiresSessionState - person Nick Kuznia; 20.05.2015

Я думаю, вам нужно реализовать пустой интерфейс IReadOnlySessionState, так что контекст будет загружен.

отредактируйте, чтобы добавить:

Согласно ответу Майкла Мортона, вы также можете реализовать IRequiresSessionState, что даст вам доступ на запись также к объекту Session.

person Jhonny D. Cano -Leftware-    schedule 09.07.2009
comment
Для многих httphandler лучше всего использовать IReadOnlySessionState, по крайней мере, когда вы проверяете только состояние сеанса, а не сохраняете его, но основная причина, по которой это лучший ответ, заключается в том, что HttpHandler реализует IReadOnlySessionState или IRequiresSessionState, а не наследует (классы могут наследовать только от других классов) . - person JackArbiter; 01.11.2013
comment
Мы обнаружили, что IReadOnlySessionState работает значительно быстрее. - person David Homer; 16.06.2021

попробуйте использовать текущий контекст ...

System.Web.HttpContext.Current.Session
person Joe Davis    schedule 09.07.2009
comment
не работает, если он не реализует один из обоих интерфейсов маркеров - person Jhonny D. Cano -Leftware-; 10.07.2009
comment
Сессия будет нулевой без IRequiresSessionState / IReadOnlySessionState - person Colin; 10.07.2009
comment
Мое плохое ... думал о HttpModules. - person Joe Davis; 10.07.2009
comment
OP сказал: Теперь я пытаюсь использовать объект System.Web.HttpContext.Session, но он имеет значение null. - person Oliver; 26.04.2012