АСП.Нет:Если у меня есть идентификатор сеанса, могу ли я получить объект сеанса?

StackOverflow https://stackoverflow.com/questions/55576

  •  09-06-2019
  •  | 
  •  

Вопрос

Этот вопрос связан с Вот этот, хотя я думаю, что я был слишком многословен, чтобы действительно получить хороший ответ.Я буду краток.

Я работаю над веб-обработчиком (ashx), который принимает сообщение формы со страницы aspx.Когда обработчик получает это сообщение формы, чтобы сделать то, что ему нужно, ему необходимо знать вошедшего в систему пользователя (User.Identity.Name), но я не могу полагаться на файлы cookie, отправляемые браузером.

Я знаю, что могу получить Session.SessionID и поместить его в скрытое поле формы, но как только мой обработчик получит сообщение формы, как я могу использовать этот SessionID для выяснения личности вошедшего в систему пользователя?

Я использую режим StateServer для состояния сеанса.

Это было полезно?

Решение 2

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

Могу ли я поместить идентификатор сеанса ASP.Net в скрытое поле формы?

Другие советы

Я думаю, вы можете сделать это, реализовав IReadOnlySessionState интерфейс вашего HttpHandler

Если нет необходимости использовать сеанс напрямую, вы всегда можете сохранить любую информацию о личности вошедшего в систему пользователя в одноэлементном словаре или кеше и ссылаться на нее через SessionID, хранящийся в скрытом поле.Лично я вижу в этом проблемы безопасности, но не буду вдаваться в подробности.Я бы рассмотрел возможность выдачи одноразовых удостоверений для такого типа реализации.

В реализации HttpHandler или HttpModule вы не всегда можете получить доступ к сеансу из события BeginRequest.Есть еще одно событие, которое вы можете обработать, — OnAcquireRequestState.Если вы напишете свой код в этом событии, HttpContext.Current.Session не будет иметь значение null.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top