0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В информатике, а конкретно в сетях, сессия - это интерактивный обмен информацией, также известный как диалог между двумя или более общающимися устройствами, или между компьютером и пользователем. Сессия (cеанс) устанавливается в определённый момент времени и позже завершается.</p>
1
<p>В информатике, а конкретно в сетях, сессия - это интерактивный обмен информацией, также известный как диалог между двумя или более общающимися устройствами, или между компьютером и пользователем. Сессия (cеанс) устанавливается в определённый момент времени и позже завершается.</p>
2
<h2>HTTP session</h2>
2
<h2>HTTP session</h2>
3
<p>Так как HTTP - это клиент-серверный протокол, HTTP сессия состоит из трёх фаз:</p>
3
<p>Так как HTTP - это клиент-серверный протокол, HTTP сессия состоит из трёх фаз:</p>
4
<ol><li>Клиент устанавливает TCP соединение (или другое соединение, если не используется TCP транспорт).</li>
4
<ol><li>Клиент устанавливает TCP соединение (или другое соединение, если не используется TCP транспорт).</li>
5
<li>Клиент отправляет запрос и ждёт ответа.</li>
5
<li>Клиент отправляет запрос и ждёт ответа.</li>
6
<li>Сервер обрабатывает запрос и посылает ответ, в котором содержится код статуса и соответствующие данные.</li>
6
<li>Сервер обрабатывает запрос и посылает ответ, в котором содержится код статуса и соответствующие данные.</li>
7
</ol><p>Начиная с версии HTTP/1.1, после третьей фазы соединение не закрывается, так как клиенту позволяется инициировать другой запрос. То есть, вторая и третья фазы могут повторяться.</p>
7
</ol><p>Начиная с версии HTTP/1.1, после третьей фазы соединение не закрывается, так как клиенту позволяется инициировать другой запрос. То есть, вторая и третья фазы могут повторяться.</p>
8
<h2>User session</h2>
8
<h2>User session</h2>
9
<p>Пользовательская сессия является более высокоуровневой абстракцией, чем HTTP-сессия. С помощью неё можно не только идентифицировать разных пользователей, но также хранить произвольные данные на каждого пользователя в рамках его сессии. Типичный пример - это корзина товаров в интернет-магазине. Обратите внимание на то, что для пользовательской сессии не обязательно логиниться (выполнять аутентификацию) на сайте.</p>
9
<p>Пользовательская сессия является более высокоуровневой абстракцией, чем HTTP-сессия. С помощью неё можно не только идентифицировать разных пользователей, но также хранить произвольные данные на каждого пользователя в рамках его сессии. Типичный пример - это корзина товаров в интернет-магазине. Обратите внимание на то, что для пользовательской сессии не обязательно логиниться (выполнять аутентификацию) на сайте.</p>
10
<p>Поддержка сессий обычно реализуется с помощью специальных библиотек в рамках используемого фреймворка. В задачи этих библиотек входит:</p>
10
<p>Поддержка сессий обычно реализуется с помощью специальных библиотек в рамках используемого фреймворка. В задачи этих библиотек входит:</p>
11
<ul><li>Установка соединения, то есть отправка специальной куки, которая содержит идентификатор сессии. Имя этой куки фиксированно и задаётся на этапе старта приложения.</li>
11
<ul><li>Установка соединения, то есть отправка специальной куки, которая содержит идентификатор сессии. Имя этой куки фиксированно и задаётся на этапе старта приложения.</li>
12
<li>Сохранение и извлечение данных из сессии. Этот пункт сильно зависит от используемого фреймворка. В случае Express предоставляется специальный объект req.session, в который можно записывать необходимую информацию и читать её в следующих запросах. Отдельный интерес представляет хранилище данных сессии. Это можно делать в памяти, прямо в куках (в зашифрованном виде), или в различных серверных хранилищах начиная от файлов, заканчивая базами данных.</li>
12
<li>Сохранение и извлечение данных из сессии. Этот пункт сильно зависит от используемого фреймворка. В случае Express предоставляется специальный объект req.session, в который можно записывать необходимую информацию и читать её в следующих запросах. Отдельный интерес представляет хранилище данных сессии. Это можно делать в памяти, прямо в куках (в зашифрованном виде), или в различных серверных хранилищах начиная от файлов, заканчивая базами данных.</li>
13
<li>Завершение сессии.</li>
13
<li>Завершение сессии.</li>
14
</ul><p>У библиотеки express-session очень много параметров, влияющих на работу сессии, и большое количество дополнений, позволяющих использовать различные хранилища. За подробностями обращайтесь к официальной документации.</p>
14
</ul><p>У библиотеки express-session очень много параметров, влияющих на работу сессии, и большое количество дополнений, позволяющих использовать различные хранилища. За подробностями обращайтесь к официальной документации.</p>
15
<p>К счастью, использовать сессии гораздо проще, чем их настраивать.</p>
15
<p>К счастью, использовать сессии гораздо проще, чем их настраивать.</p>
16
<p>В примере выше в сессии инициализируется свойство counter значением 0, а затем, при каждом обновлении страницы, счётчик увеличивается на единицу. Это будет происходить для каждого браузера независимо, потому что кука устанавливается в браузер, и браузер является "пользователем".</p>
16
<p>В примере выше в сессии инициализируется свойство counter значением 0, а затем, при каждом обновлении страницы, счётчик увеличивается на единицу. Это будет происходить для каждого браузера независимо, потому что кука устанавливается в браузер, и браузер является "пользователем".</p>
17
<p>Для удаления сессии нужно вызывать асинхронный метод destroy.</p>
17
<p>Для удаления сессии нужно вызывать асинхронный метод destroy.</p>
18
<h2>Аутентификация</h2>
18
<h2>Аутентификация</h2>
19
<p>Аутентификация это процедура проверки подлинности, например:</p>
19
<p>Аутентификация это процедура проверки подлинности, например:</p>
20
<ul><li>Проверка подлинности пользователя путём сравнения введённого им пароля с паролем, сохранённым в базе данных пользователей;</li>
20
<ul><li>Проверка подлинности пользователя путём сравнения введённого им пароля с паролем, сохранённым в базе данных пользователей;</li>
21
<li>Подтверждение подлинности электронного письма путём проверки цифровой подписи письма по открытому ключу отправителя;</li>
21
<li>Подтверждение подлинности электронного письма путём проверки цифровой подписи письма по открытому ключу отправителя;</li>
22
<li>Проверка контрольной суммы файла на соответствие сумме, заявленной автором этого файла.</li>
22
<li>Проверка контрольной суммы файла на соответствие сумме, заявленной автором этого файла.</li>
23
</ul><p>Аутентификацию не следует путать с авторизацией (процедурой предоставления субъекту определённых прав) и идентификацией (процедурой распознавания субъекта по его идентификатору).</p>
23
</ul><p>Аутентификацию не следует путать с авторизацией (процедурой предоставления субъекту определённых прав) и идентификацией (процедурой распознавания субъекта по его идентификатору).</p>
24
<p>Вот как может выглядеть процесс аутентификации в Express:</p>
24
<p>Вот как может выглядеть процесс аутентификации в Express:</p>
25
<p>При совпадении паролей в сессию устанавливается идентификатор пользователя под ключом, который потом будет использоваться для проверки, аутентифицирован ли пользователь.</p>
25
<p>При совпадении паролей в сессию устанавливается идентификатор пользователя под ключом, который потом будет использоваться для проверки, аутентифицирован ли пользователь.</p>
26
<p>Обратите внимание на то, что в примере выше используется не сам пароль, а его хешированная версия. С точки зрения безопасности ни в коем случае нельзя хранить пароли в открытом виде. Поэтому при создании пользователя пароль специальным образом хешируется, и в хранилище уже сохраняется этот хеш. Во время процедуры аутентификации пароль, вводимый пользователем, хешируется тем же способом, что и при регистрации, а затем происходит сравнение хешей.</p>
26
<p>Обратите внимание на то, что в примере выше используется не сам пароль, а его хешированная версия. С точки зрения безопасности ни в коем случае нельзя хранить пароли в открытом виде. Поэтому при создании пользователя пароль специальным образом хешируется, и в хранилище уже сохраняется этот хеш. Во время процедуры аутентификации пароль, вводимый пользователем, хешируется тем же способом, что и при регистрации, а затем происходит сравнение хешей.</p>
27
27