Подтвердить что ты не робот

В чем разница между этими двумя HttpContext.Current.Session и Session - asp.net 4.0

В чем разница между этими двумя частями кодов.

HttpContext.Current.Session["myvariable"]
Session["myvariable"]

asp.net 4.0 и С# 4.0

4b9b3361

Ответ 1

Они фактически одинаковы, поскольку они будут получать доступ к тем же данным сеанса.

Причина, по которой вы можете вызвать Session в своем коде, заключается в том, что по умолчанию страницы ASP.Net расширяют тип System.Web.UI.Page. Это свойство Session public. Если вы посмотрите на код для этого в Reflector, вы увидите, что он просто вызывает HttpContext.Current.Session сам (через собственное свойство Context).

В других классах у вас не будет доступа к этому свойству, но вы можете использовать HttpContext.Current.Session для доступа к данным сеанса, если вы работаете в контексте веб-приложения.

Ответ 2

В сценарии stantard они одинаковы. Разница в том, что первый оператор также будет работать в статических контекстах, таких как WebMethod.

Ответ 3

Есть разница. Второй (Session) является свойством многих объектов .NET, например Page. Таким образом, вы не можете иметь доступ к нему, например, в конструкторе этих объектов. Тем не менее, первый (HttpContext.Current.Session) всегда готов и находится в вашем распоряжении (конечно, после того, как сеанс загружен в Трубу обработки запросов).

Ответ 4

Нет никакой разницы. Это одно и то же; вторая форма короче:)

Ответ 5

Нет никакой разницы. Страница. Сессия возвращает HttpContext.Current.Session

С учетом сказанного, я написал .dll, которые действуют как расширения для веб-приложений. Эти .dll не имеют понятия Session. В этих случаях я могу получить доступ к текущему сеансу веб-приложения, использующего мою .dll, ссылаясь на HttpContext.Current.Session

Ответ 6

В поведении нет разницы. Если вы используете код в своем пользовательском классе, где HttpContext недоступен напрямую и хочет получить доступ к значению сеанса, чем мы используем первую строку кода, а вторая строка используется при обращении к страницам или классам управления.

Ответ 7

Еще один довольно тщательный ответ от Николаса Кэри fooobar.com/info/83360/...

"Свойство сеанса HttpApplication имеет другое поведение, чем поведение пропорционального HttpContext.Current.Session. Они возвратят ссылку на тот же экземпляр HttpSessionState, если он доступен. Они отличаются тем, что они делают, когда нет экземпляра HttpSessionState доступен для текущего запроса.

Не все HttpHandlers предоставляют состояние сеанса. Для этого HttpHandler должен реализовать [один или оба?] Интерфейсы маркеров IRequiresSessionState или IReadOnlySessionState.

HttpContext.Current.Session просто возвращает null, если сеанс недоступен.

Реализация HttpApplication свойства Session генерирует HttpException с сообщением Состояние сеанса в этом контексте недоступно. а не возвращать нулевую ссылку. "