我想了解使用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/