rails 4在生产中的每个请求中重置会话

时间:2015-08-19 15:40:38

标签: ruby-on-rails session production ruby-on-rails-4.2 ruby-2.2

我正在使用rails 4.2.0和ruby 2.2.0实现Web应用程序,并面临设置完成新会话中的任何时间请求的问题。在那种情况下,我不能保存任何东西到会话,因为它已经消失。这也导致无法检查真实性令牌的情况。

出于测试目的,在ApplicationController中禁用伪造保护,因此这不是会话重置的原因。

class ApplicationController < ActionController::Base
  #protect_from_forgery with: :null_session
  skip_before_action :verify_authenticity_token `
end 

我正在使用活动记录存储来保存会话,但cookie存储也是如此:

MyApp::Application.config.session_store :active_record_store, :key => '_myapp_session', domain: :all, tld_length: 2

每次请求完成时,sessions表的新条目都会插入新的sessions_id,并且会话cookie会在浏览器中指向新会话。

有什么想法可以重置会话?

仅在生产环境中发生这种情况。在开发过程中一切都很好。

1 个答案:

答案 0 :(得分:0)

您的问题是由于致电skip_before_action :verify_authenticity_token;如果未验证真实性令牌,Rails将重置会话。您还想重新启用protect_from_forgery

我还看到没有真实性令牌的AJAX请求导致会话重置,这里再次详细说明:http://www.kalzumeus.com/2011/11/17/i-saw-an-extremely-subtle-bug-today-and-i-just-have-to-tell-someone/

参考:https://stackoverflow.com/a/11943243/449342