HTML Diff
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