HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p><strong>Сессия</strong>-- это ряд последовательных запросов, которые совершаются в одном веб-браузере в течение определенного времени. Сессия может применяться в целях сохранения, к примеру, временных данных, доступность которых надо обеспечить на время работы пользователя с приложением, однако постоянного хранения такие данные не требуют.</p>
1 <p><strong>Сессия</strong>-- это ряд последовательных запросов, которые совершаются в одном веб-браузере в течение определенного времени. Сессия может применяться в целях сохранения, к примеру, временных данных, доступность которых надо обеспечить на время работы пользователя с приложением, однако постоянного хранения такие данные не требуют.</p>
2 <p>Чтобы хранить состояние сессии, на сервере создается словарь либо хэш-таблица, хранимая в кэше и существующая для всех запросов, поступающих из одного веб-браузера в течение определенного отрезка времени. При этом на клиенте<strong>идентификатор сессии</strong>хранится в куках. Вышеупомянутый идентификатор каждый раз посылается на сервер с каждым запросом. В свою очередь, сервер использует идентификатор в целях извлечения необходимых данных из сессии. Эти куки удаляются лишь при завершении сессии. Однако в том случае, если сервер получает куки, установленные уже для истекшей сессии, для таких кук создается новая сессия.</p>
2 <p>Чтобы хранить состояние сессии, на сервере создается словарь либо хэш-таблица, хранимая в кэше и существующая для всех запросов, поступающих из одного веб-браузера в течение определенного отрезка времени. При этом на клиенте<strong>идентификатор сессии</strong>хранится в куках. Вышеупомянутый идентификатор каждый раз посылается на сервер с каждым запросом. В свою очередь, сервер использует идентификатор в целях извлечения необходимых данных из сессии. Эти куки удаляются лишь при завершении сессии. Однако в том случае, если сервер получает куки, установленные уже для истекшей сессии, для таких кук создается новая сессия.</p>
3 <p>Сервер сохраняет данные сессии в течение ограниченного отрезка времени после последнего запроса. Дефолтный промежуток равняется 20-ти минутам, однако это значение можно менять.</p>
3 <p>Сервер сохраняет данные сессии в течение ограниченного отрезка времени после последнего запроса. Дефолтный промежуток равняется 20-ти минутам, однако это значение можно менять.</p>
4 <p>Также важно учитывать, что сессии являются специфическими для одного веб-браузера. Можно сказать, что для каждого веб-браузера на одном ПК будет формироваться свой набор данных.</p>
4 <p>Также важно учитывать, что сессии являются специфическими для одного веб-браузера. Можно сказать, что для каждого веб-браузера на одном ПК будет формироваться свой набор данных.</p>
5 <h2>Как это работает на практике</h2>
5 <h2>Как это работает на практике</h2>
6 <p>Для использования сессий необходимо сконфигурировать параметры сессий в классе<strong>Startup</strong>. Все существующие сессии функционируют поверх объекта<strong>IDistributedCache</strong>, а ASP.NET Core предоставляет встроенную реализацию, которую тоже можно использовать --<strong>IDistributedCache</strong>. Для этого меняем класс<strong>Startup</strong>:</p>
6 <p>Для использования сессий необходимо сконфигурировать параметры сессий в классе<strong>Startup</strong>. Все существующие сессии функционируют поверх объекта<strong>IDistributedCache</strong>, а ASP.NET Core предоставляет встроенную реализацию, которую тоже можно использовать --<strong>IDistributedCache</strong>. Для этого меняем класс<strong>Startup</strong>:</p>
7 <p>Что касается метода ConfigureServices(), то в него добавляются нужные сервисы:</p>
7 <p>Что касается метода ConfigureServices(), то в него добавляются нужные сервисы:</p>
8 <p>Идем дальше. В методе под названием Configure() механизм работы с сессиями встраивается в конвейер обработки запроса:</p>
8 <p>Идем дальше. В методе под названием Configure() механизм работы с сессиями встраивается в конвейер обработки запроса:</p>
9 <p>Если же мы вдруг не будем применять app.UseSession() либо попробуем обратиться к нашей сессии до применения данного метода, то мы получим исключение<strong>InvalidOperationException</strong>.</p>
9 <p>Если же мы вдруг не будем применять app.UseSession() либо попробуем обратиться к нашей сессии до применения данного метода, то мы получим исключение<strong>InvalidOperationException</strong>.</p>
10 <p>После вызова app.UseSession() появится возможность использовать сессии у объекта<strong>HttpContext</strong>. В этом случае мы проверяем, определен ли в нашей сессии ключ "name". Если данный ключ определен, можно передавать ответ-значение по этому ключу. Если не определен, устанавливаем его.</p>
10 <p>После вызова app.UseSession() появится возможность использовать сессии у объекта<strong>HttpContext</strong>. В этом случае мы проверяем, определен ли в нашей сессии ключ "name". Если данный ключ определен, можно передавать ответ-значение по этому ключу. Если не определен, устанавливаем его.</p>
11 <p>В результате после первого запроса у нас появится возможность, используя инструменты разработчика из веб-браузера, найти куку<strong>.AspNetCore.Session</strong>, которая и будет представлять идентификатор нашей сессии:</p>
11 <p>В результате после первого запроса у нас появится возможность, используя инструменты разработчика из веб-браузера, найти куку<strong>.AspNetCore.Session</strong>, которая и будет представлять идентификатор нашей сессии:</p>
12 <p><em>По материалам https://metanit.com/sharp/aspnet5/.</em></p>
12 <p><em>По материалам https://metanit.com/sharp/aspnet5/.</em></p>
13  
13