ASP.Net: Если у меня есть идентификатор сеанса, могу ли я получить объект сеанса? - PullRequest
13 голосов
/ 11 сентября 2008

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 11 сентября 2008

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

2 голосов
/ 27 октября 2008

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

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

1 голос
/ 11 сентября 2008

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

0 голосов
/ 11 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...