Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_na_voprosy_WEB (1).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.98 Mб
Скачать
  1. Способы сохранения состояния приложения (виды, назначение).

Одной из сложностей разработки web-приложения является то, что протокол HTTP является протоколом без сохранения состояния.

Это означает, что переданные в HTTP запросах данные на web-сервере автоматически не сохраняются, а уничтожаются после их обработки на сервере.

Однако среда выполнения ASP.Net приложений предоставляет много возможностей сохранения полученных от пользователей данных.

Это достигается за счет использования таких средств, как:

    1. поддержка состояние отображения (коллекция ViewState);

    2. поддержка состояния сеанса работы пользователя (объект Session);

    3. поддержка состояние web-приложения (объект Application).

    4. использование куки.

Отображение состояния web-формы ViewState

  • Отображения состояние web-формы ViewState выполняет автоматическое сохранение значений свойств ЭУ и доступно только внутри данной web-формы.

  • Значения отображения состояния передаются в HTTP ответе web-приложения (скрытое поле __VIEWSTATE) и возвращаются опять web-приложению в HTTP запросе браузера.

  • Данные полученные обратной отправке (postback) от web-формы опять отправляются пользователю (т.е. сохраняются).

  • В переменных состояния можно хранить данные любого типа (если они сериализуются).

  • Отображение состояния (ViewState) целесообразно использовать в том случае, когда необходимо организовать хранение данных в пределах одной страницы.

  • Все элементы управления используют отображение состояния по умолчанию для сохранения значений свойств между операциями обратной отправки данных.

  • В отображении состояния можно организовать хранение своих собственных данных, состоящих из простых типов и специальных объектов.

  • Работа с отображением состояния реализуется с помощью коллекции, которая является словарем.

    • данные хранятся в формате имя-значение.

    • каждый элемент, при этом индексируется с помощью уникального строкового имени или номера.

  • Например для добавления в коллекцию ViewState элемента с именем Name и присваивает ему значение “Иван”.

ViewState["Name"]="Иван";

  • При этом, если в коллекции до этого не существовало элемента с именем Name, то он добавляется, если же такой элемент был, его значение заменяется новым.

  • Для извлечения элемента из коллекции необходимо использовать имя элемента.

  • Т.к. коллекция ViewState позволяет сохранять данные состоящие не только из простых типов, но и специальные объекты (в общем случае любые объекты), во время извлечения значения элемента, необходимо преобразовать его тип к тому, который будет извлекаться.

  • Например можно извлечь значение элемента Name и преобразовать его в строку.

string name;

if (ViewState["Name"]!=null)

name=(string)ViewState["Name"];

  • Проверка на наличие элемента коллекции необходима, т.к. при обращении к несуществующему элементу коллекции возникает исключение NullReferenceException.

Особенности ViewState

  • Во-первых, количество информации, сохраняемой в состояние вида не должно быть большим, т.к. это приводит к увеличению объема передаваемых данных от сервера к клиенту и наоборот.

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

  • Во-вторых, в ViewState нельзя сохранять критично важные данные (доступ пользователя к которым необходимо запретить),

    • они легко могут быть декодированы и прочитаны, более того, опытный пользователь сможет изменить эти данные при осуществлении запроса на обратную отправку.

    • в этом случае лучше воспользоваться состоянием сеанса.

  • Кроме этого ViewState не позволяет сохранять информацию, которая будет использоваться несколькими страницами.

    • В этом случае лучше воспользоваться состоянием сеанса, объектами куки, либо строкой запроса.

Хранение состояния сессии

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

  • Хранение состояния сеанса работы пользователя выполняется с помощью объекта Session.

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

  • Пользовательские данные при этом сохраняются в формате «имя=значение».

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

  • Использует тот же синтаксис работы с коллекцией, что и ViewState.

  • Отличается только имя коллекции – Session (свойство объекта Page).

  • Каждый пользователь приложения имеет разные сессии и разные коллекции информации.

  • Объект Session идеально подходит для хранения такой информации, как «корзина для покупок», когда пользователь переходит между страницами сайта.

  • Управление состоянием сессии (Session state) является трудоемким способом, который требует дополнительных ресурсов процессора и памяти сервера.

  • Это не часть HTTP стандарта.

  • ASP.Net присваивает каждой сессии 120 битный идентификатор.

  • Только этот id передается между web-сервером и пользователем.

  • Работа с состоянием сеанса практически аналогично работе с состоянием вида, за исключением того, что вместо ключевого слова ViewState используется Session.

    • Например, для сохранения объекта user в памяти сеанса, необходимо выполнить следующий код:

Session["user"]=user;

  • Для восстановления сохраненного объекта user необходимо воспользоваться следующим кодом:

user=(User) Session["user"];

  • Состояние сеанса уничтожается в следующих случаях:

    • если пользователь закрывает браузер;

    • по истечении 20 минут с момента последней активности пользователя;

    • при явном завершении сеанса из программного кода с помощью вызова метода Session.Abandon().

Управление состоянием сессии

  • Когда пользователь предъявляет id сессии,

    • ASP.Net ищет соответствующую сессию;

    • считывает сериализованные данные связанные с данной сессией;

    • преобразует их в объекты оперативной памяти;

    • Помещает их в специальную коллекцию, из которой они могут быть получены.

  • При обработки HTTP запроса он проходит через обработку модулем SessionStateModule, который

    • При поступлении запроса генерирует ID, получает данные сессии от внешнего провайдера состояния (external state providers) и привязывает данные к контексту запроса.

    • При окончании обработки запроса сохраняет информацию страницы.

  • Хранением информации сессии занимается внешний компонент, который называется провайдером состояния (state provider)

  • InProc

    • хранение состояния сеанса в оперативной памяти на Web server (по умолчанию, самое быстрое).

    • Подходит для простых приложений, но если требуется поддерживать данные состояния между запусками, необходимо использовать StateService или SQLServer.

  • StateServer

    • хранение состояния сеанса с помощью сервиса, называемого «ASP.NET Служба состояния» (State Service).

    • Данные сохраняются между запусками и доступны с разных Web серверам в Web ферме.

    • Сервис ASP.NET State Service установлен на любом компьютере где установлены ASP.NET Web Application (по умолчанию его надо запускать вручную).

  • SQLServer

    • хранение состояния сеанса в базе данных на SQL Server.

    • Данные сохраняются между запусками и доступны с разных Web серверам в Web ферме.

    • Хранение на «ASP.NET State Service» более эффективно, чем на SQL Server. Однако, база данных на SQL Server предлагает больше возможностей по интеграцию и отчетности.

  • Custom

    • позволяет задать своего провайдера хранилища данных, если он разработан.

  • Off

    • данные состояния сессии не хранятся.

    • Если они не используются, то для повышения эффективности их лучше отключить.

Передача ID сессии

  • Если куки включены то они используются

    • ID сессии передается в специальном cookie (c именем ASP.NET_SessionId),

    • данный куки создается автоматически, когда используется коллекция Session.

    • Данный подход используется по умолчанию.

  • Если куки отключены, то используется измененный URL

    • в этом случае ID сессии передается в специально измененном URL.

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