【问题标题】:rails 4 resets session on every request in productionrails 4 在生产中的每个请求上重置会话
【发布时间】:2015-11-13 00:31:13
【问题描述】:

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

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

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

【问题讨论】:

  • 你有没有发现你的问题?我现在有同样的问题。真的没有意义:/
  • 好吧,我没有找出问题所在,但问题不知何故消失了。这很奇怪。您是否尝试删除会话 cookie 并重新加载页面?试试看会发生什么。

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


【解决方案1】:

您的问题是由于致电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

【讨论】:

  • 我删除了skip_before_action :verify_authenticity_token 并取消了protect_from_forgery 的注释,但问题仍然存在。
  • 首先的问题是我在 POST 请求期间遇到了 ActionController::InvalidAuthenticityToken 异常。很明显,CSRF 检查是在 POST 请求期间执行的。我的表单中有authenticity_token 隐藏字段,所以这不是问题。我仍然认为问题是每次请求后会话都会重置。
猜你喜欢
  • 2012-12-03
  • 2021-05-30
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2023-03-12
  • 1970-01-01
  • 2020-05-25
相关资源
最近更新 更多