Как сервер распознает сессионный cookie клиента, не сохраняя его на сервере

Я пытаюсь понять, как именно работает механизм управления сеансами в веб-приложении без сохранения состояния. В настоящее время я использую Play Framework, но я думаю, что механизм должен быть одинаковым для всех веб-платформ без сохранения состояния.

это из документации игровой фреймворк: ( ссылка)

Важно понимать, что данные Session и Flash не хранятся на сервере, а добавляются к каждому последующему HTTP-запросу с использованием механизма cookie

а также

Конечно, значения cookie подписываются секретным ключом, поэтому клиент не может изменить данные cookie (или они будут аннулированы).

Теперь мой вопрос: если сервер не сохраняет ничего об идентификаторе сеанса, как он аутентифицирует сеанс, исходящий от клиента?!

Я много занимался поиском, но не мог понять, как на самом деле работает управление сессиями на стороне сервера.

1 ответ

Решение

Теперь мой вопрос: если сервер не сохраняет ничего об идентификаторе сеанса, как он аутентифицирует сеанс, исходящий от клиента?

Что делает игра, так это подписывает ваши данные сеанса с помощью ключа, скажем KEY(это application.secret, который вы установили в application.conf), и генерирует буквенно-цифровые данные. Затем он прикрепляет данные и зашифрованные данные к cookie и отправляет их обратно.

Зашифрованные данные = 5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea

ДАННЫЕ = userEmail=sil@st.com&userName=silentprogrammer

Если вы проверите cookie(щелкните правой кнопкой мыши на браузере-> Проверить элемент-> Приложение->Cookie-> Ваш URL) в браузере запущенного приложения, вы увидите что-то вроде

"5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea-userEmail=sil@st.com&userName=silentprogrammer"

Для каждого запроса он получает часть данных (userEmail=sil@st.com&userName=silentprogrammer) снова подписывает данные из KEY и проверяет их на буквенно-цифровые данные, поступающие из запроса, т.е. 5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea если оба равны (если данные и ключ шифрования одинаковы), сеанс подтверждается, в противном случае сеанс истекает. Вы можете подтвердить это, изменив часть данных из cookie в браузере и повторно отправив запрос, сеанс не будет существовать.

Это то, что я заметил

Другие вопросы по тегам