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

Збереження стану сеансу на стороні клієнта (англ. 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 

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]