Збереження стану сеансу на стороні клієнта (шаблон проєктування)

Збереження стану сеансу на стороні клієнта (англ. Client Session State) — шаблон проєктування, який пропонує зберігати стан сеансу на стороні клієнта.

Опис

ред.

При реалізації клієнт-серверної архітектури необхідно реалізувати передачу даних між обома сторонами. При цьому варто зберігати інформацію про сеанс.

Даний шаблон пропонує зберігати стан сеансу на стороні клієнта.

Переваги та недоліки

ред.

Переваги

ред.
  • Висока швидкодія. Перевірка та створення сеансів відбувається швидко, дані отримуються із HTTP-запиту, не потрібно перевіряти сховище
  • Зменшення навантаження із сервера. Кожний клієнт містить свій власний стан
  • Не потрібно копіювати стан між різними вебсерверами
  • Можна легко додати новий вебсервер, оскільки він не містить стану, а отримує його ззовні

Недоліки

ред.
  • Низька надійність, необхідне шифрування
  • Викликає навантаження, якщо клієнт тонкий
  • Сеанс не можна змінити на вимогу. Куки можна видалити з браузера, але він все одно буде працювати, доки термін дії не закінчиться
  • Розмір HTTP-запиту збільшується залежно від розміру сеансу

Реалізація

ред.

Розглянемо декілька способів передачі сеансу зі сторони клієнта.

Один із таких - це використання уніфікованого локатора ресурсів. Наприклад, нехай у нас є мережа організацій, тоді доступ до різних організацій можна регулювати залежно від параметрів:

https://localhost:1000/<organization-identifier>/catalog

Інший варіант - це використання прихованих полів. Цей варіант може бути корисний, коли необхідно передати дані, та запобігти можливості їх редагування клієнтом.

<input type="hidden" id="id" value="19">

Також можна використати веб сховище або ж куки. Так, наприклад, при реалізації опитувальника необхідно, щоб користувач не втратив заповнені дані. Тоді при заповнені кожного поля можна сереалізовувати значення та запам'ятовувати їх у сховищі, а при повторному відкриті сторінки відновлювати стан.

document.cookie = $("#survey-form").serializeArray()

Щоб не зберігати інформацію про користувача на кожному сервісі її можна кодувати та передавати разом із запитом. Ось такий вигляд матиме JWT токен.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Див. також

ред.

Джерела

ред.