ruby-on-rails - Rails/devise如何处理Cookie session ?

标签 ruby-on-rails authentication devise

我想了解使用rails / devise登录用户时的实际情况。

我创建了一个最小的Rails应用程序,安装了devise,并创建了User devise模型。
一切正常,当我登录(使用remember me)时,得到的 session cookie符合预期。

现在困扰我的是:Rails如何处理浏览器通过cookie传递的 session 信息?

我天真地希望某些信息存储在数据库中,但是我看不到哪里。没有session表之类的东西,在Users中没有 session 列,而且我在tmp目录中找不到任何感兴趣的东西。

请注意,重新启动服务器不会终止我的 session 。当然是可以预期的,但是现在我真的想知道这里正在发生什么魔术?

换句话说:服务器如何检查cookie的有效性以验证用户身份?

谢谢 !

最佳答案

默认的Rails session 存储为CookieStore。这意味着所有 session 数据都存储在cookie中,而不是存储在数据库中的任何位置。在Rails 3.2中,对cookie签名以防止篡改,但未加密。在Rails 4中,通常默认情况下将其加密。它在cookie中的事实是它在服务器重新启动后如何持续存在。这也意味着您只能存储4k的数据,而您不想在Rails <4中在其中存储任何敏感数据。无论如何,最好在 session 中保留最少的数据。

您还可以选择将 session 数据存储在数据库中,并且仅在cookie中包含 session ID。

我前一周给出的答案有一些可能有用的额外信息:

Sessions made sense to me before I started reading about them online

另外,CookieStore的rails api文档给出了一个不错的摘要:

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

关于ruby-on-rails - Rails/devise如何处理Cookie session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783016/

相关文章:

ruby-on-rails - Capybara::ElementNotFound:无法找到可见字段

css - Rails:开发中的 Sprockets::Rails::Helper::AssetNotPrecompiled

ruby-on-rails - 如何使用 devise 和 Rails 4 设置用户身份验证?

java - Java 中基于 Web 表单的登录

django - django restframework 中用于身份验证的自定义模型而不是默认用户模型

ruby-on-rails - 设计 sign_in_and_redirect 导致 rspec 测试失败

ruby-on-rails-3 - 覆盖设计密码 Controller

ruby-on-rails - 在 CoffeeScript 中访问 Rails 变量

ruby-on-rails - 为什么我的 session 在使用 PerformanceTest 而不是 IntegrationTest 时会过期?

c# - 如何根据单个 ASP.NET Core 应用程序中的某些内容动态更改 OpenID 配置?