我有一些功能,我在会话中保存了哪些设置。但重新加载1次后,它们会重置并且会话值不存在。
首次加载我得到会话
{"session_id"=>"xxx"}
保存价值后我得到了
{"session_id"=>"xxx", "value"=>"100"}
当我再次重新加载页面时,我会重置会话
{"session_id"=>"xxx"}
为什么会这样?
答案 0 :(得分:1)
很可能你没有在你的一个(可能是AJAX)请求中传递CSRF令牌。如果rails收到无效的CSRF令牌 - 它会重置会话。
退房:http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
更新:Vidya是对的。您可能还想将以下代码添加到ApplicationController中 - 为AJAX调用设置XSRF令牌
after_filter :set_csrf_cookie
def set_csrf_cookie
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
end
答案 1 :(得分:1)
$(document).ajaxSend((event, jqxhr, settings) ->
jqxhr.setRequestHeader("X-CSRF-Token", $('meta[name="csrf-token"]').attr('content'))
jqxhr.setRequestHeader("X-CSRF-Param", $('meta[name="csrf-param"]').attr('content'))
return
)
现在是CoffeScript,并假设您使用的是JQuery。无论如何,重点是您需要随着Ajax请求发送CSRF元数据。
答案 2 :(得分:0)
感谢每一个人,我发现问题,但我无法解释。
稍后我从js文件app/assets/javascripts/application.js
//= require jquery_ujs
当我把它放回去时,它会停止重置会话值。