Alguém tem alguma dica de "melhores práticas" para Rails e sessões? O tipo de sessão padrão para Rails 3 ainda é CookieStore, certo? Usei SqlSessionStore por um tempo e funcionou bem, mas posso me afastar disso em favor do CookieStore.
Ainda não é uma boa ideia usar CookieStore para informações confidenciais, mesmo com informações salgadas ou isso é melhor armazenado no banco de dados?
ruby-on-rails
ruby
session
cookies
Lukas
fonte
fonte
Respostas:
Use o banco de dados para sessões em vez do padrão baseado em cookies, que não deve ser usado para armazenar informações altamente confidenciais
Crie a tabela de sessão com
rake db:sessions:create
Execute a migração
rake db:migrate
Certifique-se também de dizer aos rails para usar ActiveRecord para gerenciar suas sessões também.
Rails 3
config / initializers / session_store.rb:
Rails.application.config.session_store :active_record_store
Rails 2
config / environment.rb:
config.action_controller.session_store = :active_record_store
fonte
rake db:sessions:create
está obsoleto e removido no Rails 4, porque não é escalável para aplicativos com muitos usuários (muitas leituras e gravações de banco de dados). Veja rails 4.0, rake db: sessions: create .Os cookies são criptografados por padrão no Rails 4
No Rails 4, os cookies CookieStore são criptografados e assinados por padrão:
O armazenamento de sessão do Active Record está obsoleto no Rails 4
Esta resposta agora está desatualizada em relação ao Rails 4. O Active Record Session Store foi descontinuado e removido do Rails, então os seguintes geradores não funcionarão mais:
rake db:sessions:create
rails generate session_migration
Isso foi apontado nesta resposta . A razão pela qual o Active Record Session Store foi preterido é porque as leituras / gravações no banco de dados não escalam bem quando você tem um grande número de usuários acessando seu aplicativo, conforme declarado nesta postagem do blog :
Se você ainda deseja usar o Armazenamento de Sessão do Active Record, ele ainda está disponível como uma jóia .
Melhores práticas atuais da sessão Rails
Para mais práticas recomendadas atuais para sessões de Ruby on Rails, aconselho que você verifique as versões mais recentes do Guia de segurança Ruby on Rails .
fonte
Não acredito que nada mudou em como qualquer pessoa em qualquer plataforma deve lidar com sessões baseadas em cookies. Seja cético em relação a tudo o que vai além do controle do servidor (cookies, postagens de formulários, etc.). Esse é um princípio geral de desenvolvimento web.
Quanto à criptografia, não sei se mudou alguma coisa nesse aspecto.
Algo para se ter em mente com um armazenamento de cookies é o limite para a quantidade de dados, e a pegadinha de que esses dados serão enviados na transferência em cada solicitação, onde, como um armazenamento de banco de dados, apenas transfere o id e os dados ficam no servidor .
fonte
FWIW, rails 3.1 sugere execução
No entanto, isso gera exatamente a mesma migração que
rake db:sessions:create
fonte
db:sessions:create
agora invoca diretamente osession_migration
gerador. tarefa: criar =>: ambiente levanta "Tarefa indisponível para este banco de dados (sem suporte de migração)" a menos que ActiveRecord :: Base.connection.supports_migrations? requer 'rails / geradores' Rails :: Generators.configure! require 'rails / generators / rails / session_migration / session_migration_generator' Rails :: Generators :: SessionMigrationGenerator.start [ENV ["MIGRAÇÃO"] || "add_sessions_table"] fimrake db:sessions:create
erails generate session_migration
estão obsoletos e foram removidos no Rails 4, porque eles não escalam bem para aplicativos com muitos usuários (muitas leituras e gravações de banco de dados). Veja rails 4.0, rake db: sessions: create .Os padrões do Rails parecem muito bons para mim - O CookieStore é rápido e deve cobrir a maioria dos casos de uso. Claro que você está limitado a 4kb e seus dados ficarão visíveis para o usuário, mas a maneira do Rails é usar a sessão apenas para coisas como IDs inteiros e valores de string básicos - Se você está tentando armazenar objetos ou informações altamente confidenciais na sessão provavelmente você está fazendo errado.
fonte