Как сервер распознает сессионный 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 в браузере и повторно отправив запрос, сеанс не будет существовать.
Это то, что я заметил