Текущая практика Rails сессий - PullRequest
82 голосов
/ 07 апреля 2010

У кого-нибудь есть какие-нибудь "лучшие практики" для Rails и сессий? Тип сеанса по умолчанию для Rails 3 по-прежнему CookieStore, верно? Некоторое время я использовал SqlSessionStore, и он работал хорошо, но я могу отойти от этого в пользу CookieStore.

Не рекомендуется ли использовать CookieStore для конфиденциальной информации, даже с соленой, или лучше хранить в БД?

Ответы [ 5 ]

102 голосов
/ 25 августа 2010

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

Создать таблицу сеансов с

rake db:sessions:create

Запустить миграцию

rake db:migrate

Убедитесь, что вы также указали rails использовать ActiveRecord для управления сессиями.

Рельсы 3

конфиг / Инициализаторы / session_store.rb:

Rails.application.config.session_store :active_record_store

Рельсы 2

конфиг / environment.rb:

config.action_controller.session_store = :active_record_store
50 голосов
/ 19 апреля 2014

Файлы cookie по умолчанию шифруются в Rails 4

В Rails 4, CookieStore cookie-файлы шифруются и подписываются по умолчанию:

Если у вас установлено только secret_token, ваши куки будут подписаны, но не будут зашифрованы. Это означает, что пользователь не может изменить свои user_id, не зная вашего секретный ключ приложения, но может легко прочитать их user_id. Это было по умолчанию для приложений Rails 3.

Если вы установили secret_key_base, ваши куки будут зашифрованы. Это идет шаг дальше, чем подписанные куки в том, что зашифрованные куки не могут быть изменены или прочитанный пользователями. Это значение по умолчанию в Rails 4.

Если у вас настроены secret_token и secret_key_base, ваши куки будут будут зашифрованы, и подписанные куки, сгенерированные Rails 3, будут прозрачно читать и шифровать, чтобы обеспечить плавный путь обновления.

Хранилище сеансов активной записи устарело в Rails 4

Этот ответ устарел по отношению к Rails 4. Активная запись Session Store устарел и удален из Rails, поэтому следующее генераторы больше не будут работать:

  • rake db:sessions:create

  • rails generate session_migration

Это было указано в этом ответе . Причина в том, что Active Record Session Store устарел, потому что чтение / запись в базу данных не хорошо масштабируется, когда у вас есть большое количество пользователей, обращающихся к вашему приложению, как указано в этом блоге :

... одной из основных проблем хранилища сеансов Active Record является то, что оно не масштабируемый. Это создает ненужную нагрузку на вашу базу данных. После того, как ваше заявление получает большой объем трафика, таблица базы данных сеансов постоянно бомбардируется операциями чтения / записи.

Начиная с Rails 4, хранилище сеансов Active Record удалено из ядра рамки и теперь устарела.

Если вы все еще хотите использовать хранилище сеансов Active Record, оно все еще доступно как драгоценный камень .

Рекомендации по текущей сессии Rails

Для более актуальных рекомендаций для сессий Ruby on Rails я советую вам Ознакомьтесь с последними версиями Руководства по безопасности Ruby on Rails .

9 голосов
/ 07 апреля 2010

Я не верю, что что-то изменилось в том, как кто-либо на любой платформе должен обрабатывать сеансы на основе файлов cookie. Скептически относитесь ко всему, что выходит за рамки контроля сервера (файлы cookie, сообщения в форме и т. Д.). Это общий принцип веб-разработки.

Что касается шифрования, я не знаю, изменилось ли что-нибудь на этом фронте.

При хранении файлов cookie следует помнить об ограничении количества данных, а также о том, что эти данные будут отправляться по проводам при каждом запросе, когда хранилище базы данных передает только идентификатор и данные живут на сервере.

4 голосов
/ 22 февраля 2012

FWIW, рельсы 3.1 предлагает работать

rails generate session_migration

Однако это генерирует точно такую ​​же миграцию, как и

rake db:sessions:create
2 голосов
/ 12 сентября 2013

Настройки Rails кажутся мне довольно хорошими - CookieStore работает быстро и должен охватывать большинство случаев использования. Конечно, вы ограничены 4 КБ, и ваши данные будут видны пользователю, но способ Rails состоит в том, чтобы использовать сессию только для таких вещей, как целочисленные идентификаторы и основные строковые значения - если вы пытаетесь хранить объекты или конфиденциальную информацию в сеансе Вы, вероятно, делаете это неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...