Сессии в ASP.NET Core | OTUS

Сессии в ASP.NET Core

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

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

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

Также важно учитывать, что сессии являются специфическими для одного веб-браузера. Можно сказать, что для каждого веб-браузера на одном ПК будет формироваться свой набор данных.

Как это работает на практике

Для использования сессий необходимо сконфигурировать параметры сессий в классе Startup. Все существующие сессии функционируют поверх объекта IDistributedCache, а ASP.NET Core предоставляет встроенную реализацию, которую тоже можно использовать -- IDistributedCache. Для этого меняем класс Startup:

1-1801-06e508.png

Что касается метода ConfigureServices(), то в него добавляются нужные сервисы:

2-1801-bf17bc.png

Идем дальше. В методе под названием Configure() механизм работы с сессиями встраивается в конвейер обработки запроса:

3-1801-70275a.png

Если же мы вдруг не будем применять app.UseSession() либо попробуем обратиться к нашей сессии до применения данного метода, то мы получим исключение InvalidOperationException.

После вызова app.UseSession() появится возможность использовать сессии у объекта HttpContext. В этом случае мы проверяем, определен ли в нашей сессии ключ "name". Если данный ключ определен, можно передавать ответ-значение по этому ключу. Если не определен, устанавливаем его.

4-1801-5faeb4.png

В результате после первого запроса у нас появится возможность, используя инструменты разработчика из веб-браузера, найти куку .AspNetCore.Session, которая и будет представлять идентификатор нашей сессии:

5-1801-c7fde5.png

По материалам https://metanit.com/sharp/aspnet5/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто