rails / devise如何处理cookie会话?

时间:2014-02-14 15:17:03

标签: ruby-on-rails authentication devise

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

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

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:17)

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

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

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

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

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

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