Как работает сеанс и файлы cookie? - программирование

Как работает сеанс и файлы cookie?

Как воспроизводить файл cookie?

  • Я заметил, что после перезапуска сервера я все еще регистрировался, хотя я не выдавайте никаких данных сеанса в базе данных.
  • Я также заметил что я могу установить дату на сервере, чтобы быть больше, чем exipry дата файла cookie, и все же я вошел в систему.
  • Я вышел из системы (сохранил файл cookie в текстовом файле), и браузер потерял файл cookie. Затем я воссоздал файл cookie из текстового файла, и я снова вошел в систему.

Файл cookie выглядит следующим образом:

PLAY_SESSION = e6443c88da7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-% 3A1 идентификатор пользователя

// My logout code
def logout() = Action {
  Ok("").withNewSession
}

Из документации
Отмена всего сеанса
Существует специальная операция, которая отбрасывает весь сеанс:

Ok("Bye").withNewSession
4b9b3361

Ответ 1

Вы не указали, как вы выполняете аутентификацию пользователей, поэтому я просто предполагаю, что вы используете простой образец, который... прост.

Он использует идентификатор пользователя для идентификации пользователя и проверяет, не был ли манипулирован подписанный cookie сеанса, поэтому, если вы заново создадите файл cookie с правильной подписью, он будет действительным.

Вы должны создать некоторую область для ключей сеанса на стороне сервера, т.е. в БД или в кеше памяти (который будет быстрее, чем БД). Его ключ должен быть случайным образом сгенерирован (и предпочтительно довольно длинный) для каждого успешного действия входа в систему, а также должен содержать данные для идентификации пользователя, дату истечения срока действия и т.д. Затем вы должны поместить этот случайный sess_key в сеанс воспроизведения, а не адрес электронной почты зарегистрированного пользователя или id его строки в БД, а после выхода из системы и/или срока действия его следует удалить. В таком случае, даже если вы потеряете файл cookie после выхода из системы, невозможно будет правильно войти в систему с помощью не-esixting sess_key.

Стандартный кэш памяти AFAIR будет очищен при каждом перезапуске приложения, чтобы убедиться, что все sess_keys из БД будут удалены, а также вы можете использовать Глобальный объект и усечь таблицу в методе onStart(...).

Ответ 2

Я нашел ответ, более внимательно прочитав документацию и объединив разные части.

Технический тайм-аут для сеанса отсутствует. Он истекает, когда пользователь закрывает веб-браузер. Если вам нужен функциональный тайм-аут для конкретное приложение, просто сохраните временную метку в сеансе пользователя и используйте его, однако ваше приложение нуждается (например, для максимальной сессии продолжительность, максимальная продолжительность бездействия и т.д.).


Важно понять, что данные сеанса и Flash не являются хранящиеся на сервере, но добавляемые к каждому последующему HTTP-запросу, используя механизм cookie. Это означает, что размер данных очень ограничено (до 4 КБ) и что вы можете хранить только строковые значения.


Я так боялся, что если cookie потеряется, любой сможет войти на сервер для будущего.

Что мне нужно сделать, чтобы обеспечить это, добавить автоматическую авторизацию времени (сохранить временную метку в файле cookie и проверить на стороне сервера)