У кого-нибудь есть какие-нибудь "лучшие практики" для Rails и сессий? Типом сеанса по умолчанию для Rails 3 по-прежнему является CookieStore, верно? Некоторое время я использовал SqlSessionStore, и он работал хорошо, но я могу отказаться от этого в пользу CookieStore.
По-прежнему ли использовать CookieStore для конфиденциальной информации, даже с соленой информацией, или ее лучше хранить в БД?
ruby-on-rails
ruby
session
cookies
Лукас
источник
источник
Ответы:
Используйте базу данных для сеансов вместо файлов cookie по умолчанию, которые не следует использовать для хранения очень конфиденциальной информации.
Создайте сеансовую таблицу с
rake db:sessions:create
Запустите миграцию
rake db:migrate
Убедитесь, что вы также сказали rails использовать ActiveRecord для управления сеансами.
Рельсы 3
config / initializers / session_store.rb:
Rails.application.config.session_store :active_record_store
Рельсы 2
config / environment.rb:
config.action_controller.session_store = :active_record_store
источник
rake db:sessions:create
Rails 4 исключен и удален, поскольку он плохо масштабируется для приложений с большим количеством пользователей (слишком много операций чтения и записи базы данных). См. Rails 4.0, rake db: sessions: create .Файлы cookie по умолчанию зашифрованы в Rails 4
В Rails 4 файлы cookie CookieStore по умолчанию зашифрованы и подписаны:
Хранилище сессий Active Record устарело в Rails 4
Этот ответ теперь устарел для Rails 4. Хранилище сеансов Active Record устарело и удалено из Rails, поэтому следующие генераторы больше не будут работать:
rake db:sessions:create
rails generate session_migration
На это указывалось в этом ответе . Причина, по которой хранилище сеансов Active Record устарела, заключается в том, что операции чтения / записи в базу данных плохо масштабируются при большом количестве пользователей, обращающихся к вашему приложению, как указано в этом сообщении блога :
Если вы все еще хотите использовать хранилище сеансов Active Record, оно все еще доступно в виде драгоценного камня .
Лучшие практики текущей сессии Rails
Для получения более актуальных передовых практик для сеансов Ruby on Rails я советую вам ознакомиться с последними версиями Руководства по безопасности Ruby on Rails .
источник
Я не верю, что что-то изменилось в том, как кто-либо на любой платформе должен обрабатывать сеансы на основе файлов cookie. Скептически относитесь ко всему, что выходит за рамки контроля сервера (файлы cookie, сообщения форм и т. Д.). Это общий принцип веб-разработки.
Что касается шифрования, я не знаю, изменилось ли что-нибудь в этом направлении.
При работе с хранилищем файлов cookie следует помнить об ограничении объема данных и о том, что эти данные будут отправляться по сети в каждом запросе, тогда как хранилище базы данных передает только идентификатор, а данные живут на сервере. .
источник
FWIW, rails 3.1 предлагает запустить
Однако это вызывает ту же миграцию, что и
rake db:sessions:create
источник
db:sessions:create
теперь напрямую вызываетsession_migration
генератор. task: create =>: environment действительно вызывает сообщение «Задача недоступна для этой базы данных (без поддержки миграции)», если ActiveRecord :: Base.connection.supports_migrations? требуется 'rails / generators' Rails :: Generators.configure! требуется 'rails / generators / rails / session_migration / session_migration_generator' Rails :: Generators :: SessionMigrationGenerator.start [ENV ["MIGRATION"] || "add_sessions_table"] Конецrake db:sessions:create
Иrails generate session_migration
генераторы устарели и удалено в Rails 4, потому что они не очень хорошо масштабируются для приложений с большим количеством пользователей (слишком много баз данных на чтение и запись). См. Rails 4.0, rake db: sessions: create .Значения по умолчанию в Rails кажутся мне довольно хорошими - CookieStore работает быстро и должен охватывать большинство случаев использования. Конечно, вы ограничены 4 КБ, и ваши данные будут видны пользователю, но способ Rails - использовать сеанс только для таких вещей, как целочисленные идентификаторы и базовые строковые значения - если вы пытаетесь хранить объекты или очень конфиденциальную информацию в сеансе вы, вероятно, делаете это неправильно.
источник