【问题标题】:Rails session doesn't persistRails 会话不会持续存在
【发布时间】:2021-08-18 16:23:36
【问题描述】:

我无法让 Rails 会话在本地环境和外部暂存环境中持续存在。现在我只是在做一些基本的事情,比如我的一个控制器中的session[:cart_id]=1。如果我重新加载页面,会话将出现空{}。我一定错过了一些基本的东西,因为我在网上找不到任何关于这很常见的信息。

更新 1

即使是最简单的代码也会显示会话不持久,例如,我可以在我的操作中执行简单的操作,例如 session[:counter] = session[:counter].to_i + 1,然后在我的视图中执行 = debug session,每次刷新浏览器时我都会得到:

{} {"session_id"=>"280031b7eb3b4bf612da85acc8815b3b", "counter"=>1}

并且每次都会生成一个新的session_id

更新 2

我从我的会话存储中删除了:domain => :all 选项,事情看起来更好了,但仍然没有持久。现在session_id 只生成一次,所以它一直存在。但是,如果我在会话中存储一个整数,它仍然不会持续到下一个请求。

【问题讨论】:

  • 你的 Rails 版本和控制器代码是什么?
  • 您是否在浏览器中禁用了 cookie?
  • 您是否更改了会话的配置?该应用程序是从 Rails 2 迁移到 Rails 3 还是进一步迁移到 Rails 3.1?
  • 这绝对不常见 - 刚刚在新应用中测试,这种情况仍然存在。
  • rails 3.0.9,用一些代码更新了我的原始帖子,我从未更改过默认会话存储:Web::Application.config.session_store :cookie_store, :key => '_web_session', :domain => :all

标签: ruby-on-rails session


【解决方案1】:

我遇到了同样的问题,这让我发疯了。

原来我的ApplicationController 中有一个protect_from_forgery,它默默地用NullSession 替换了会话。

我在运行raise session.class.inspect 时注意到了这一点。

使用protect_from_forgery with: :exception 可以正确揭示潜在问题。

【讨论】:

  • 解决方法是什么?运行检查时出现 RuntimeError: ActionDispatch::Request::Session。
猜你喜欢
  • 1970-01-01
  • 2015-02-15
  • 2015-06-15
  • 2023-04-03
  • 1970-01-01
  • 2018-06-25
  • 2013-11-08
  • 1970-01-01
  • 2012-01-10
相关资源
最近更新 更多