Ruby on rails Rails会话未保存

Ruby on rails Rails会话未保存,ruby-on-rails,ruby,session,ruby-on-rails-4,Ruby On Rails,Ruby,Session,Ruby On Rails 4,我正在将Rails应用程序从Rails 2直接升级到Rails 4。我在CookieStore中使用了新的/config/initializers/session_store.rb文件,但由于某些原因,我的会话没有保存 当你试图做一些事情的时候 render:text=>“#{request.session_options[:id]}” 每次刷新我都会得到一个新的会话ID 我在不同的浏览器上试用过,所有浏览器都应该接受cookies 我不知道发生了什么事。为什么这些课程不会持续下去 编辑:谢谢大

我正在将Rails应用程序从Rails 2直接升级到Rails 4。我在CookieStore中使用了新的
/config/initializers/session_store.rb
文件,但由于某些原因,我的会话没有保存

当你试图做一些事情的时候
render:text=>“#{request.session_options[:id]}”
每次刷新我都会得到一个新的会话ID

我在不同的浏览器上试用过,所有浏览器都应该接受cookies

我不知道发生了什么事。为什么这些课程不会持续下去

编辑:谢谢大家的建议。这里有更多的信息和我注意到的一些事情:

  • 首先,关于我的设置——我正在Windows7机器上的Ubuntu虚拟机上通过RVM使用Rails 4/Ruby 2运行服务器
  • 虽然我是从Rails 2升级的,但这只适用于模型/控制器/视图等——我为所有支持基础设施生成了一个新的Rails 4应用程序
  • 我在同一个虚拟机上创建了另一个应用程序,它只需设置一个会话,然后显示,效果很好
  • 会话存储的内容根据用户所做的事情略有不同,但通常它只保存一个用户id(只是一个整数),偶尔还会保存更多--(我在尝试从OAuth gem传递OAuth令牌时首次注意到这一点。)
  • 我注意到,如果虚拟机的系统时钟落后于Windows7主机时钟,那么用户id会话将保持不变。这会导致其他问题,尤其是OAuth,但似乎在某些地方存在时间问题。我曾尝试过从我的环境/development.rb中删除时区,但没有效果
来自:

我们还需要做一个配置更改,这是秘密的 令牌初始值设定项。在Rails 4中,此文件中的配置选项 已从密钥令牌重命名为密钥库。我们需要 在从Rails 3转换时指定这两个选项,但只指定一次 我们已经成功迁移了应用程序,可以删除 秘密令牌选项。最好为我们的客户使用不同的代币 秘密密钥库

这是必要的,因为我们正在从存储的序列化cookie移动 在客户端上创建一个加密的cookie。这使得用户无法轻松地 能够看到他们会话cookie的内容


这一集包含了一系列关于从2升级到4的非常好的技巧,我通过本教程成功地做到了这一点

一般来说,有几个可能的问题

  • 会话限制(显然是这样的)

    如果试图存储超过4K的数据,则会引发CookieOverflow
请记住,如果您在会话中存储对象,则该对象在存储之前是序列化的,其大小将更大。有关一般问题和特定问题的可能解决方案的更多信息

  • 有问题

    如果安全令牌与预期的不匹配,则会话 将被重置
编辑:要检查是否为CSRF案例,您可以按照下面的Abdo注释,暂时禁用
应用程序控制器中的
防止伪造


我也有类似的症状。原来是因为我添加了rails api gem,它完全破坏了会话保存。

你能发布文件的内容吗。您是否定义了秘密令牌?rails日志中有任何警告吗?Sure@jurglic--session\u store.rb文件是
Uplinkr4::Application.config.session\u store:cookie\u store,key:'\u Uplinkr4\u session'
,并且secret\u token.rb中定义了一个秘密令牌。我在日志中完全没有看到任何警告(与此相关)。看起来不错。更改这些文件后是否重新启动了服务器?您没有在浏览器中禁用cookie吗?
rake中间件
输出中是否有可疑信息<代码>使用ActionDispatch::Session::CookieStore
应该在那里。@DNNX——这是一个很好的想法,但在
rake中间件中并没有什么奇怪的地方
——它包括
使用ActionDispatch::Session::CookieStore
。谢谢。实际上,我已经有了一个
secret\u key\u base
——事实上(我可能早就应该澄清这一点),我生成了一个全新的Rails 4应用程序,然后将我的控制器/模型/视图/助手等移到其中并进行相应的调试。据我所知,所有对会话的引用都只是设置或读取它们——几乎所有配置会话的内容都应该是rails 4应用程序生成器的默认值。我在自己的应用程序中也经历了同样的过程。该教程在这一过程中帮了我很多忙。我的会话被重置,我完全忽略了日志中的“警告:无法验证CSRF令牌的真实性”。如果您在日志中看到这一点,则很可能是CSRF问题导致您的会话被删除。为了查看重置会话是否是CSRF问题,请暂时注释掉
ApplicationController
@Gonfva中的
protect\u from\u fackery
行,说明如何解决特定于该案例的“CSRF保护问题”。一个通用的解决方案可能是如何使用Rails API进行保存?