Rails предоставляет несколько механизмов хранения для хэшей сессии. Наиболее важными являются ActiveRecord::SessionStore
и ActionDispatch::Session::CookieStore
.
Существует множество хранилищ сеансов, то есть где Rails сохраняет хэш сеанса и идентификатор сеанса. Большинство приложений реального времени выбирают ActiveRecord::SessionStore
(или одну из своих производных) по сравнению с файловыми хранилищами из-за причин производительности и обслуживания. ActiveRecord::SessionStore
хранит идентификатор сеанса и хеш в таблице базы данных и сохраняет и извлекает хэш для каждого запроса.
Rails 2 представил новое хранилище сеансов по умолчанию, CookieStore
. CookieStore
сохраняет хэш сеанса непосредственно в файле cookie на стороне клиента. Сервер извлекает хэш сеанса из файла cookie и устраняет необходимость в идентификаторе сеанса. Это значительно увеличит скорость применения, но это спорный вариант хранения, и вам нужно подумать о последствиях его безопасности:
Cookies подразумевают строгий предел размера 4 КБ. Это нормально, так как вы не должны хранить большие объемы данных в сеансе в любом случае, как описано выше. Сохранение идентификатора базы данных текущего пользователя в сеансе обычно выполняется. Клиент может видеть все, что вы храните в сеансе, потому что он хранится в ясном тексте (на самом деле Base64-закодирован, поэтому не зашифрован). Поэтому, конечно, вы не хотите хранить секреты здесь. Чтобы предотвратить фальсификацию хеша сессии, дайджест вычисляется из сеанса с секретностью на стороне сервера и вставляется в конец файла cookie. Это означает, что безопасность этого хранилища зависит от этого секретного (и от алгоритма дайджеста, который по умолчанию не имеет SHA512, который еще не был скомпрометирован). Поэтому не используйте тривиальный секрет, то есть слово из словаря, или слово, которое короче 30 символов.
коррекция; значение не зашифровывается, а кодируется (с базой 64) по умолчанию. – Cem
Хотя вопрос был о Rails 3, в котором файлы cookie были только закодированы, стоит отметить, что Rails 4 шифрует их. – sheldonh
Почему Rails 4 шифрует? Есть идеи? , Не будет ли это дорогостоящим для приложения rails, которое зашифровывает/делит все запросы? –