0

我正在使用 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 指向新会话。

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

这只发生在生产环境中。在开发中一切都很好。

4

1 回答 1

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 -今天和我只是不得不告诉某人/

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

于 2015-08-19T17:25:32.497 回答