Как рельсы/разработки обрабатывают сеансы cookie?

Я хотел бы понять, что происходит, когда вы подписываете пользователя с помощью rails/devise.

Я создал минимальное приложение rails, установил его и создал модель User. Все работает нормально, и когда я вхожу в систему (используя remember me), я получаю cookie сеанса так, как ожидалось.

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

Я бы наивно ожидал, что какая-то информация будет сохранена в базе данных, но я не вижу, где. Там нет такой вещи, как session table, no session column в Users, и я не мог найти ничего интересного в директории tmp.

Обратите внимание, что перезапуск сервера не будет убивать мой сеанс. Это, конечно, ожидалось, но теперь мне действительно интересно, какая здесь магия?

Другими словами: как сервер проверяет правильность файла cookie для аутентификации пользователя?

Спасибо!

Ответы

Ответ 1

По умолчанию хранилище сеансов рельсов - CookieStore. Это означает, что все данные сеанса хранятся в файле cookie, а не в базе данных в любом месте. В Rails 3.2 cookie подписывается для предотвращения несанкционированного доступа, но не зашифрованного. В Rails 4 он по умолчанию зашифрован. Тот факт, что он в cookie - это то, как он сохраняется за перезагрузками вашего сервера. Это также означает, что вы можете хранить только 4k данных, и вы не захотите хранить что-либо чувствительное в Rails < 4. Лучше всего хранить как минимум данные в сеансе.

Вы также можете выбрать сохранение данных сеанса в базе данных и только наличие идентификатора сеанса в файле cookie.

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

Сеансы имели смысл для меня, прежде чем я начал читать о них в Интернете

Кроме того, rails api doc для CookieStore дает хорошее резюме:

http://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html