rails/devise如何处理cookie会话?

ahe*_*rve 21 authentication ruby-on-rails devise

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

我创建了一个最小的rails应用程序,安装了devise并创建了一个User设计模型.一切正常,当我登录(使用remember me)时,我得到一个会话cookie就像预期的那样.

现在让我烦恼的是:rails如何处理浏览器通过cookie传递的会话信息?

我天真地期望一些信息存储在数据库中,但我看不到哪里.没有session表,没有会话列Users,我找不到任何感兴趣的tmp目录.

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

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

谢谢 !

Tim*_*Tim 19

默认的rails会话存储是CookieStore.这意味着所有会话数据都存储在cookie中,而不是存储在数据库中的任何位置.在Rails 3.2中,cookie被签名以防止篡改,但不加密.在Rails 4中,它通常默认加密.它在cookie中的事实是它在服务器重启时如何持续存在.这也意味着你只能存储4k的数据,而你不想在Rails <4中存储任何敏感的东西.最好还是在会话中保留最少的数据.

您还可以选择将会话数据存储在数据库中,并且只在cookie中具有会话ID.

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

在我开始在线阅读之前,会话对我有意义

此外,CookieStore的rails api doc提供了一个很好的总结:

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