我想了解使用rails / devise登录用户时的实际情况。
我创建了一个最小的rails应用程序,安装了devise并创建了一个User
设计模型。
一切正常,当我登录时(使用remember me
),我得到的会话cookie就像预期一样。
现在让我烦恼的是:rails如何处理浏览器通过cookie传递的会话信息?
我天真地期望一些信息存储在数据库中,但我看不到哪里。 session
没有Users
表,tmp
没有会话列,我在{{1}}目录中找不到任何有趣的内容。
请注意,重新启动服务器不会终止我的会话。这当然是预期的,但现在我真的想知道这里发生了什么样的魔法?
换句话说:服务器如何检查cookie的有效性以验证用户?
谢谢!
答案 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