Изучение сессии в ASP.Net - Сессия и куки

ОГЛАВЛЕНИЕ

Сессия и куки

Клиенты используют куки-файлы для работы с сессией, потому что клиенту надо предъявлять правильный идентификатор сессии с каждым запросом. Это можно сделать следующими способами:

Использование куки-файлов: По умолчанию ASP.NET создает специальные куки-файлы с именем ASP.NET_SessionId автоматически, когда используется коллекция сессий. Идентификатор сессии передается с помощью этих куки-файлов.

Изменение URL вместо куки: Некоторые старые барузеры не поддерживают куки, или пользователь может отключить куки в браузере, в таком случае ASP.Net передает идентификатор сессии в специально измененном URL.

Как работает изменение URL вместо куки?

Когда пользователь запрашивает страницу на сервере, сервер кодирует идентификатор сессии и добавляет ее к каждой ссылке href на странице. Когда пользователь щелкает по любой ссылке, ASP.NET декодирует этот идентификатор сессии и передает его странице, запрошенной пользователем. Теперь запрошенная страница может извлечь любую переменную сессию. Все это происходит автоматически, если ASP.NET обнаруживает, что браузер пользователя не поддерживает куки.

Как реализовать изменение URL вместо куки?

Для этого надо сделать состояние сессии лишенным куки.

Удаление сессии из переменной сессии

Ниже приведен список методов, применяемых для удаления сессии.

Метод

Описание

Session.Remove(strSessionName);

Удаляет элемент из коллекции состояний сессии

Session.RemoveAll()

Удаляет все элементы из коллекции сессий

Session.Clear()

Удаляет все элементы из коллекции сессий. Замечание: Нет разницы между Clearи RemoveAll. RemoveAll() внутренне вызывает Clear().

Session.Abandon()

Удаляет текущую сессию.

Включение и отключение сессии

Для оптимизации производительности можно включить или отключить сессию, потому что каждое обращение к странице для чтения и записи сопряжено с издержками производительности. Поэтому лучше включать и отключать сессию на основе требований, а не делать ее всегда включенной. Можно включить и отключить состояние сессии двумя путями:

•    Уровень страницы
•    Уровень приложения

Уровень страницы:

Можно отключить состояние сессии на уровне страницы с помощью атрибутов EnableSessionState в директиве Страница.

 

Это отключает активность сессии для данной конкретной страницы.

Также можно сделать ее доступной только для чтения. Она будет разрешать обращаться к данным сессии, но не даст писать данные в сессию.

 

Уровень приложения:

Можно отключить состояние сессии во всем веб-приложении с помощью свойства EnableSessionState в Web.Config.

 

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

Вывод

Теперь вы знакомы с сессией, ее использованием, как применять ее в веб-фермах и др. в ASP.NET 2.0. В качестве вывода,
•    Внутрипроцессный (InProc) поставщик сессии – наиболее быстрый метод, потому что все хранится в памяти. Данные сессии теряются при перезапуске веб-сервера или при возврате рабочего процесса в исходное состояние. Он применяется в маленьких веб-приложениях с малым числом пользователей. Не используйте InProc в веб-ферме.
•    В режиме сессии StateServer данные сессии хранятся с помощью aspnet_state.exe. Он держит данные сессии вне веб-сервера. Поэтому любая проблема с веб-сервером не влияет на данные сессии. Надо сериализовать объект перед сохранением данных в сессии сервера состояний. Его можно использовать в веб-ферме.
•    Режим сессии SQLServer хранит данные в SQL Server, надо задать строку подключения. Также надо сериализовать данные перед сохранением их в сессии. Он очень полезен в производственной среде с режимом веб-фермы.
•    Можно использовать пользовательский поставщик для пользовательского источника данных или при необходимости использовать существующую таблицу для хранения данных сессии. В пользовательском режиме также можно создать пользовательский идентификатор сессии. Но создавать собственный пользовательский поставщик не рекомендуется. Следует использовать любой сторонний поставщик.