АСП.Нет:Если у меня есть идентификатор сеанса, могу ли я получить объект сеанса?
Вопрос
Этот вопрос связан с Вот этот, хотя я думаю, что я был слишком многословен, чтобы действительно получить хороший ответ.Я буду краток.
Я работаю над веб-обработчиком (ashx), который принимает сообщение формы со страницы aspx.Когда обработчик получает это сообщение формы, чтобы сделать то, что ему нужно, ему необходимо знать вошедшего в систему пользователя (User.Identity.Name), но я не могу полагаться на файлы cookie, отправляемые браузером.
Я знаю, что могу получить Session.SessionID и поместить его в скрытое поле формы, но как только мой обработчик получит сообщение формы, как я могу использовать этот SessionID для выяснения личности вошедшего в систему пользователя?
Я использую режим StateServer для состояния сеанса.
Решение 2
Джонас опубликовал отличный ответ на этот вопрос здесь:
Могу ли я поместить идентификатор сеанса ASP.Net в скрытое поле формы?
Другие советы
Я думаю, вы можете сделать это, реализовав IReadOnlySessionState интерфейс вашего HttpHandler
Если нет необходимости использовать сеанс напрямую, вы всегда можете сохранить любую информацию о личности вошедшего в систему пользователя в одноэлементном словаре или кеше и ссылаться на нее через SessionID, хранящийся в скрытом поле.Лично я вижу в этом проблемы безопасности, но не буду вдаваться в подробности.Я бы рассмотрел возможность выдачи одноразовых удостоверений для такого типа реализации.
В реализации HttpHandler или HttpModule вы не всегда можете получить доступ к сеансу из события BeginRequest.Есть еще одно событие, которое вы можете обработать, — OnAcquireRequestState.Если вы напишете свой код в этом событии, HttpContext.Current.Session не будет иметь значение null.