Ruby on rails Rails会话未保存
我正在将Rails应用程序从Rails 2直接升级到Rails 4。我在CookieStore中使用了新的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 我不知道发生了什么事。为什么这些课程不会持续下去 编辑:谢谢大
/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中删除时区,但没有效果
这一集包含了一系列关于从2升级到4的非常好的技巧,我通过本教程成功地做到了这一点 一般来说,有几个可能的问题
- 会话限制(显然是这样的) 如果试图存储超过4K的数据,则会引发CookieOverflow李>
- 有问题 如果安全令牌与预期的不匹配,则会话 将被重置
应用程序控制器中的防止伪造
行
我也有类似的症状。原来是因为我添加了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进行保存?