我无法在本地环境和外部登台环境中保持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
只生成一次,所以这是持久的。但是如果我在会话中存储一个整数,它仍然不会持久到下一个请求。
答案 0 :(得分:4)
我有同样的问题,这让我疯了。
事实证明我的protect_from_forgery
中有一个ApplicationController
,它用NullSession
默默地取代了会话。
当我跑raise session.class.inspect
时,我注意到了这一点。
使用protect_from_forgery with: :exception
代替正确揭示潜在问题。