Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Состояние веб-приложения. управление состоянием

Лекция



Привет, Вы узнаете о том , что такое состояния веб-приложений, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое состояния веб-приложений, управление состоянием, сессия , настоятельно рекомендую прочитать все из категории Основы интернет и веб технологий.

Состояние веб-приложения

Веб-страница повторно создается каждый раз, как она отсылается обратно на сервер. В среде традиционного веб-программирования это означает, что вся информация в пределах страницы и в элементах управления теряется при каждом пробеге "туда обратно". Чтобы преодолеть данное препятствие традиционного веб-программирования, структуры страниц ASP.NET включает в себя различные опции, помогающие сохранить изменения. Одна из опций включают в себя сохранение информации у клиента, напрямую в странице или файле куки, а другая опция подразумевает сохранение информации на сервере между пробегами. Следующие объекты были разработаны для содержания состояния приложения: HttpSessionState, HttpApplicationState, ViewState, HttpCookie, HiddenFiled и также строки запросов и базы данных могут служить хранителями состояния. Итак, мы можем обобщить все сказав, что существуют два различных способа управления состоянием веб-приложения: со стороны клиента и со стороны сервера.

управление состоянием КЛИЕНТСКОЙ СТОРОНЫ

Способы хранения состояния web-приложений

  • 1.View State – хранение и передача данных в скрытом поле страницы
  • 2.Query String – хранение и передача данных в строке запроса
  • 3.Custom Cookies – хранение и передача данных в куки элементах.
  • 4.Session State – хранение данных в состоянии сессии.
  • 5.Application State – хранение данных в состоянии приложения.
  • 6.Профили (Profiles) – хранение данных в описании профиля пользователя.
  • 7.Кэш (Caching) – хранение данных в кэше.

Файлы куки (Cookies)

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

Скрытые поля

Стандартным способом сохранения состояния данных является использование скрытых HTML-полей. Скрытое поле хранит данные посредством кода HTML . Скрытое поле не будет отображаться в обозревателе, но мы можем установить его свойства таким же образом, как устанавливаем свойства для других стандартных элементов управления. Когда страница отсылается на сервер, содержимое скрытого поля отсылается в коллекции Form вместе со значениями других элементов управления. Для того, чтобы данные скрытые значения были доступны во время обработки страницы, нам необходимо отослать страницу.

ViewState

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

Строки запроса

Строки запроса предоставляют простой, но ограниченный способ сохранения некоторой информации о состоянии. Вы с легкостью можете передавать информацию с одной страницы на другую, но большинство обозревателей и клиентских устройств имеют предел в 255 символов относительно длины ссылки URL. В дополнение, значения запроса раскрываются всей сети посредством ссылки URL, потому в некоторых случаях это может угрожать безопасности. Ссылка с запросом может выглядеть следующим образом: http://site.com/listing.aspx?group=1&item=1.

Сравнение способов хранения состояния

1. View State

2. Query String

3. Custom Cookies

Разрешен-ные типы данных

Все сериализуемые типы данных .Net

Ограниченное количество строковых данных

Строковые данные

Место хранения

Скрытые поля в текущей web странице

URL строка браузера

Компьютер клиента (в ОП или небольшие текстовые файлы, в зависимости от задания срока хранения).

Срок хранения

Хранятся постоянно для обратной отправки (postbacks) одной страницы.

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

Задаются программистом. Могут использоваться в нескольких страницах и сохранятся между посещениями.

Масштаб

В рамках текущей страницы.

В рамках вызываемой страницей.

Все ASP.Net приложение.

Безопас-ность

Защищены от неумелого обращения, но легко читаемы. Можно использовать директиву Page для усиления шифрования.

Хорошо читаемы и просты для изменения пользователем.

Небезопасные и могут изменяться пользователями.

Производительность

Хранение большого кол-ва информации замедляет передачу, но не будет влиять на скорость обработки на сервере.

Замедления нет, так как количество данных небольшое.

Замедления нет, так как количество данных небольшое.

Типичное использование

Параметры специфичные для страницы.

Например: отправка ID продукции из страницы каталога в страницу описаний.

Предпочтения персонализации для web сайта.

4. Об этом говорит сайт https://intellect.icu . Session State

5. Application State

6. Profiles

Разрешен-ные типы данных

Все сериализуемые типы данных .Net. Не сериализуемые типы данных поддерживаются, если используется по умолчанию in-process state сервис.

Все типы данных .Net.

Все сериализуемые типы данных .Net

Место хранения

Память сервера (по умолчанию) или специальная БД, в зависимости от выбранного режима.

Оперативная память сервера.

На сервере в базе данных

Срок хранения

В течении заданного периода времени (обычно 20 мин. Но может быть изменен).

Время работы приложения (обычно до перезагрузки сервера).

Не ограничено.

Масштаб

Все ASP.Net приложение.

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

Конкретный пользователь

Безопас-ность

Безопасно, так как данные не передаются клиенту. Однако могут подвергаться перехвату сеанса (session hijecking) если не использовать SSL.

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

Безопасно, так как данные никогда не передаются клиенту.

Производительность

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

Хранение большого кол-ва информации может замедлить сервер, т.к. эти данные никогда не устаревают и не удаляются.

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

Типичное использование

Например: хранение элементов в корзине покупателя.

Хранение любого типа глобальных данных.

Хранение долговременных предпочтений пользователей

6. Профили (Profiles)

7. Кэш (Caching)

Разрешен-ные типы данных

Все сериализуемые типы данных .Net. Не сериализуемые типы данных поддерживаются, если используется по умолчанию in-process state сервис.

Все типы данных .Net. Не сериализуемые типы поддерживаются, если создать custom profile.

Место хранения

База Данных на сервере (back-end database).

Оперативная память сервера.

Срок хранения

Постоянный.

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

Масштаб

Все ASP.Net приложение. Может быть доступно и другим приложениям.

Также как и у application state (глобально для всех пользователей и всех страниц).

6. Профили (Profiles)

7. Кэш (Caching)

Безопас-ность

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

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

Производительность

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

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

Типичное использование

Хранение информации об учетных записях потребителей.

Хранение данных полученных из БД.

УПРАВЛЕНИЕ СОСТОЯНИЕМ СЕРВЕРНОЙ СТОРОНЫ SERVER-SIDE STATE MANAGEMENT

•Поддержка состояния приложения на стороне клиента:

  • В скрытом поле ViewState
  • В строке запроса Query Strings
  • В элементах куки Cookies

•Поддержка состояния сеанса или приложения на стороне сервера

  • InProc
  • SQL

Объект Application

Объект Application предоставляет механизм для хранения данных, которые доступны всем кодам, запущенным в веб-приложении. Идеальными данными, которые стоит внести в переменные состояния приложения, являются те, которые разделены между множеством сессий и которые не изменяются часто. И поскольку они видны всему приложению, вам стоит использовать методы Lock и UnLock для того, чтобы избежать конфликтов значений.

Объект Session

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

Состояние веб-приложения.  управление состоянием

Использование базы данных

Сохранение состояний, используя базы данных, является стандартным способом хранения информации о пользователе, когда сохраняемая информация довольно объемна. Хранилище базы данных, в частности, пригодно для хранения долгосрочных состояний или тех состояний, который должны быть сохранены даже в том случае, если сервер должен быть перегружен. Подход, использующий базы данных, зачастую используется с файлами куки. К примеру, когда пользователь получает доступ к приложению, ему может понадобиться ввести логин/пароль для авторизации. Вы можете найти его учетную запись в базе данных и затем передать файл куки обратно пользователю. Файл куки может содержать только идентификационные данные (ID) пользователя, хранимые в вашей базе данных. Вы затем можете использовать данный файл в последующих запросах для того, чтобы при необходимости найти информацию в базе данных.

ЗАДАЧА

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

 Состояние веб-приложения.  управление состояниемСостояние веб-приложения.  управление состоянием

Но что делать, если требования заставляют нас хранить MyDtoObject в базе данных, но временно? Тогда нам необходимо хранить MyDtoObject в HttpApplicationState для того, чтобы он был доступным между пользовательскими сессия ми. Нелегко изменять пакеты файлов одновременно. Что нам необходимо, так это возможность определить то, как мы будет хранить MyDtoObject, без необходимости повторного кодирования.

РЕШЕНИЕ

Как нам кажется, использование HttpSessionState, HttpCookie и HttpApplicationState напрямую не совсем удобно, потому мы разработали некоторый тип упаковщиков для таких объектов, следуя принципам Объектно-ориентированного программирования. К примеру, нам необходимо иметь объект ApplicationSettings , который будет хранить состояние в файле куки, а также предполагается, что это будет одноэлементный объект. Все, что нам необходимо сделать, так это заставить ApplicationSettings класс наследовать SingletonStateObject>.

  Состояние веб-приложения.  управление состоянием

SingletonStateObject и StateObject являются базовыми классами для любого объекта состояния. Оба этих класса работают с реализаторами IStorage.

Состояние веб-приложения.  управление состоянием

Интерфейс IStorage определяет контракт для сохранения, возврата и удаления данных из хранилища.

Состояние веб-приложения.  управление состоянием

РЕАЛИЗАТОРЫ ISTORAGE

Реализаторы StateObject, SingletonStateObject и IStorage демонстрируют шаблон проектирования "Мост", который позволяет определять ваш собственный объект состояния в более гибкой манере. В зависимости от ваших нужд, вы можете использовать конкретный реализатор хранилища или же реализовать собственный.

  • Используйте CookieStorage в случае, если вам необходимо сохранять малые объемы данных на клиенте, при этом проблемы с безопасностью не рассматриваются как возможные.
  • Используйте ApplicationStorage в случае, если вам необходимо хранить небольшие объемы данных, которые будут часто изменяться и доступны различным пользователям.
  • Используйте SessionStorage в том случае, если вам необходимо хранить кратковременную информацию, специфическую для индивидуальной сессии, при этом проблемы с безопасностью не рассматриваются как возможные. Не храните большие объемы информации в объекте состояния сессии. Будьте внимательны - объект состояния сессии будет создан и сохранен на весь жизненный цикл каждой сессии в вашем приложении. В приложениях, содержащих множество пользователей, это может занимать значительные серверные ресурсы и повлиять на масштабируемость.
  • Используйте DoaStorage тогда, когда вам необходимо хранить большие объемы информации при управлении транзакциями или же когда информация должна пережить перезапуски приложений и сессий, а безопасность необходимо учитывать.

РЕАЛИЗАЦИЯ DAOSTORAGE

Давайте вернемся к объекту ApplicationSettings. Что если требования заставят нас изменить хранилище, а ApplicationSettings уже не будет одноэлементым объектом? Требования принуждают хранилище приспособиться к перезапускам Application (приложения) и Session (сессий), поэтому нам необходимо использовать базу данных для сохранения состояния. Существует таблица Heap ("куча") , которая имеет колонки Key ("ключ") и Value ("значения") в базе данных MS Access, которая доступна вместе с прикрепленным к данной статье исходным кодом. Все что нам необходимо выполнить, так это сериализовать объект и сохранить его, используя предоставленный ключ.

  Состояние веб-приложения.  управление состоянием Состояние веб-приложения.  управление состоянием

В данном классе мы используем XmlSerialazer для занесения объектов в базу данных, поэтому нам необходимо помнить о том, что ApplicationSettigs должно быть XmlSerializable. Давайте модифицируем класс ApplicationSettings:

  Состояние веб-приложения.  управление состоянием

Теперь класс ApplicationSettings не является одноэлементным, а также не зависит от перезагрузок ApplicationSession (сессий). Вместо использования HttpSessionState или HttpApplicationState он сериализует свое состояние в базу данных. (приложения) и

МАСШТАБИРОВАНИЕ

Использование HttpSessionState обладает некоторыми проблемами производительности, а использование файлов куки страдает от проблем с безопасностью. Существует множество других альтернативных хранилищ, которые вы можете использовать, но если вам необходимо иметь настраиваемую стратегию хранения для группы объектов - что делать? Давайте разработаем ConfigurableStorage , который позволяет нам определить стратегию хранения исходя из конфигурации.

  Состояние веб-приложения.  управление состоянием

Как вы могли убедиться, ConfigurableStorage является простым классом, который создает другой тип хранилища и использует его для сохранения состояний объектов. Он также демонстрирует метод Proxy. Давайте изменим класс: ApplicationSettings

 Состояние веб-приложения.  управление состоянием

Теперь ApplicationSettings наследует ConfigurableStorage , а также другие классы, которые предположительно настраиваются. Это наиболее безболезненный метод изменения стратегии хранения группы объектов в приложении.

Исследование, описанное в статье про состояния веб-приложений, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое состояния веб-приложений, управление состоянием, сессия и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Основы интернет и веб технологий

создано: 2020-05-27
обновлено: 2021-03-13
132265



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Основы интернет и веб технологий

Термины: Основы интернет и веб технологий