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

Опис

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

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

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

Переваги

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

Недоліки

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

Реалізація

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

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

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

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

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

Див. також Клієнт-серверна архітектура Вебсервер HTTP Уніфікований локатор ресурсів Web Storage Куки JSON Web Token

Джерела Client Session State Patterns of Enterprise Application Architecture