Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab4.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.32 Mб
Скачать

Состояние сеанса

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

Состояние сеанса подобно состоянию приложения во всем, кроме области види­мости: состояние сеанса доступно только в текущем сеансе браузера. Если с приложе­нием работают несколько пользователей, у каждого из них будет свое состояние сеан­са. Если пользователь закроет приложение либо вернется к нему после тайм-аута, ин­формация из состояния прежнего сеанса будет потеряна и будет создано новое состо­яние сеанса.

Состояние сеанса хранится в виде пар «ключ — значение» объекта-словаря Session (экземпляр класса HttpSessionState). В эту структуру можно добавить информацию, спе­цифичную для сеанса, чтобы сохранить ее между запросами страниц. После добавления такой информации в его состояние сервер будет обрабатывать ее без участия клиента, и состояние сеанса будет недоступно клиенту.

Состояние сеанса применяют для решения следующих задач:

  • уникальная идентификация браузеров и клиентских запросов и сопоставление их сеансам на сервере. Это позволяет отслеживать страницы вашего сайта, открытые пользователем в течение визита;

  • хранение на сервере данных, специфичных для сеанса и доступных в течение сеанса при многократных запросах браузеров и клиентских устройств. Это лучший способ хранения содержимого корзины покупателя;

  • генерация событий управления сеансом. Кроме того, эти события можно задейство­вать в коде приложения.

После добавления в состояние сеанса информации, специфичной для приложения, управление объектом состояния сеанса осуществляет сервер. Сеансовые данные могут храниться в cookie, на внешних серверах либо в БД SQL Server. Централизованное хра­нение состояния сеансов — лучший вариант, если клиентская часть веб-приложения функционирует на нескольких веб-серверах.

Чтение и запись состояния сеанса

Приведенный ниже пример кода демонстрирует запись времени последней загрузки страницы, а также последующее его извлечение и приведение к соответствующему типу. Этот код работает, подобно примеру с ViewState. Объект Session доступен для любой страницы, счетчик увеличивается независимо от способа перехода на другие страницы (щелчком кнопки возврата формы или ссылки), сам счетчик хранится на сер­вере, а не на клиенте:

//C#

// Проверить, существует ли объект Session, и показать результат

if (Session["lastVisit"] != null)

Label1.Text = ((DateTime)Session["lastVisit"]).ToString();

else

Label1.Text = "Session does not have last visit information.";

// Определить объект Session для следующего визита

Session["lastVisit"] = DateTime.Now;

Для отслеживания сеанса пользователя в ASP.NET используется cookie ASP.NETSessionId со случайным 24-байтовым значением. Хранящиеся в Session значе­ния должны поддерживать сериализацию.

Отключение состояния сеанса

Если состояние сеанса не используется, можно повысить производительность, отклю­чив его для всего приложения путем присваивания свойству sessionState mode в файле Web.config значения Off, как показано в следующем примере:

<configuration>

<system.web>

<sessionState mode="off"/>

</system.web>

</configuration>

Для отключения состояния сеанса на отдельной странице приложения установите страничную директиву EnableSessionState в False. Также можно присвоить директиве EnableSessionState значение ReadOnly, чтобы предоставить доступ только для чтения к сеансовым переменным. Отключение состояния сеанса для страницы иллюстрирует сле­дующий пример:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableSessionState = "False"%>

Настройка состояния сеанса без cookie

По умолчанию состояние сеанса использует cookie для отслеживания сеансов пользова­теля. Это оптимальный выбор для большинства приложений. Почти все веб-браузеры поддерживают cookie, а для клиентов, не поддерживающих cookie, обычно не нужно отслеживать сеансовые данные (пример — агенты поисковых машин и другие роботы).

Тем не менее можно включить состояние сеансов без cookie (cookieless-сеансов), чтобы ASP.NET отслеживала сеансы через строки запроса в составе URL. ID сеанса внедряется в URL через слэш после имени приложения и предшествует идентификато­рам файлов и виртуальных каталогов. Например, в следующий URL был модифициро­ван ASP.NET (вставлен уникальный ID сеанса — celit3py55t21z5v55vlm25s55):

http://www.example.com/s(lit3py55t21z5v55vlm25s55)/orderform.aspx

Ниже показан пример файла Web.confïg с настройками, позволяющими использо­вать в приложении ASP.NET идентификаторы для cookieless-сеансов.

<configuration>

<system.web>

<sessionState cookieless="true" regenerateExpiredSessionId="t rue" />

</system.web>

</configuration>

Обработка событий сеанса

ASP.NET поддерживает два события, применяемых для управления сеансами пользователя:

  • Session_Start

Генерируется при начале нового сеанса. Обработка этого события — отличный спо­соб инициализации сеансовых переменных.

  • SessionEnd

Генерируется при завершении сеанса пользователем либо по истечении времени ожи­дания. Используется для освобождения ресурсов, занятых сеансом.

Для реализаций обработки этих событий добавьте файл Global.asax в проект и напи­шите код обработчиков, как показано в разделе «Обработка событий приложения».

Выбор режима состояния сеанса

Состояние сеанса ASP.NET поддерживает несколько способов хранения данных состо­яния, задающихся следующими параметрами:

  • InProc

Состояние сеанса хранится в памяти веб-сервера. InProc — параметр по умолчанию, так как более эффективен, чем служба состояния ASP.NET или хранение состояния в БД на сервере. InProc — отличный вариант для простых приложений. Но высоко­надежные приложения, функционирующие на нескольких веб-серверах, которым необходимо сохранять сеансовые данные при перезапуске, должны использовать параметры StateServer или SQLServer.

  • StateServer

Состояние сеанса хранит ASP.NET-служба State Service. Оно гарантирует сохранность состояния сеанса при перезапуске веб-приложений, а также делает его доступным всем веб-серверам в составе веб-фермы. Служба состояния ASP NET работает на любом компьютере, обслуживающем веб-приложения ASP.NET. По умолчанию она запускается вручную. Поэтому при настройке службы состояния ASP.NET нужно назначить ей тип запуска Автоматически (Automatic).

  • SQLServer

Состояние сеанса хранится в базе данных SQL. Это гарантирует сохранность состо­яния сеанса при перезапуске веб-приложений, а также делает его доступным всем веб-серверам в составе веб-фермы. При равных возможностях оборудования служ­ба состояния ASP.NET эффективнее хранения состояния в БД SQL Server, но после­дний вариант надежнее защищает целостность данных и поддерживает более широ­кие возможности отчетности.

  • Custom

Этот параметр указывает пользовательский метод хранения состояния. Для его при­менения необходимо реализовать собственный провайдер хранения состояния.

  • Off

Отключает состояние сеанса. Для повышения производительности приложения от­ключите состояние сеанса, если оно не используется.

Настройка режима Session State

Режим состояния сеанса ASP.NET задают, присваивая одно из значений перечисли­мого SessionStateMode атрибуту mode элемента sessionState в файле Web config приложе­ния. Все режимы, кроме InProc и Off, требуют такие дополнительные параметры, как строки подключения. Узнать текущий режим состояния сеанса можно из свойства System.Web.SessionState.HttpSessionState.Mode.

Например, хранение состояния сеансов в базе данных SQL Server, заданной строкой подключения, определяют следующие параметры в Web.config:

<configuration>

<system.web>

<sessionState mode="SQLServer"

cookieless="true "

regenerateExpiredSessionId="true "

timeout="30"

sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"

stateNetworkTimeout="30"/>

</system.web>

</configuration>

Настраивать состояние сеанса может и разработчик, но обычно это находится в ком­петенции системных администраторов. Например, системный администратор может исходно включить параметр InProc для вашего веб-приложения на одном из серверов. Если в дальнейшем возникнет перегрузка сервера либо потребуется избыточность, системный администратор сможет подключить второй веб-сервер и запустить службу со­стояния ASP.NET, установив в файле Web.config режим StateServer. К счастью, настрой­ка режима состояния сеанса незаметна для приложения, поэтому изменять его код не требуется — достаточно внести необходимые изменения в файл Web.config.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]