Rails 5 session.delete,而不是删除浏览器中的cookie

时间:2017-02-18 07:10:10

标签: ruby-on-rails session cookies

我一直在做

的练习
  

https://www.railstutorial.org/book/basic_login#sec-exercises_logging_out

据说我应该确认会话在注销后被删除了 是否使用

删除会话
session.delete(:user_id)

会在我的浏览器(Firefox)中制作cookie,消失吗?

此外,我注意到当我访问我的网站中的不同页面时,cookie的内容会发生变化,这是一种预期的行为吗?我第一次访问我的网站时也会得到cookie,即使没有登录

1 个答案:

答案 0 :(得分:0)

不,它只会从Cookie中删除密钥,我们可以在源代码https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/request/session.rb#L146中看到。 它实际上会杀死经过身份验证但cookie仍然存在(它只是不会说用户已经过身份验证了。)

  

另外,我注意到当我访问我的网站中的不同页面时,cookie的内容会发生变化,这是预期的行为吗?

是的,如果您正在使用CookieStore(这是Rails中的默认方式),则所有数据都存储在cookie中。因此,如果您添加或更改字段,则cookie会更改。 (您会注意到数据已加密,因此这是安全的)。 http://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html

  

我第一次访问我的网站时也会得到cookie   什么时候没有登录

有意义的是,Rails甚至在任何身份验证发生之前都会启动会话 - 它基本上只是一个没有任何数据的标识符。 “会话”并不一定意味着经过身份验证的用户,您可能希望保存用户的首选语言或即使在他通过身份验证之前打开网站的时间。