ruby-on-rails - Rails 4 session 不会跨请求持续存在

标签 ruby-on-rails ruby session ruby-on-rails-4 ruby-on-rails-3.2

我的 Rails 3.2 应用程序有一个名为 LaunchController 的 Controller ,它为其他 Web 应用程序提供 API,以便它们可以在我的应用程序中嵌入生成和评分的测验。

当外部应用程序发布到 LaunchController 时,LaunchController#create 使用 OAuth 进行身份验证,缓存一个知道外部应用程序的对象 @tool,将缓存键存储在 session session[:launch_tool_cache_key] 并重定向到呈现测验的另一个 Controller AttemptsController#new。当用户提交他们的答案时,AttemptsControllert#create 会为他们的测验打分并使用@tool 将成绩发回外部应用程序。

在 3.2 中一切正常。

上周我(终于!)将我的应用程序升级到 Rails 4.2。我对其余的迁移进行了排序,应用程序现在正在开发中。除了这个过程。

问题在于保留 session[:launch_tool_cache_key],它包含我用来从缓存中检索序列化 @tool 的 key ,这样我就可以发送成绩了返回到外部应用程序。我的日志显示缓存 key 存储在 LaunchController 中,但在重定向到 AttemptsController#new 后 session key 消失了。

我尝试过的事情:

  • 注释掉 protect_from_forgery
  • 添加 skip_before_filter :verify_authenticity_token

最佳答案

将对象保存到 session key 可能会出现一些问题。看这里

Rails session not persisting after redirects

这个问题看起来和你的很相似。

如果是这样,您最好将您的@tool 存储到数据库中(例如,它可以是 Redis),将一个 key 存储到 session 中,并在重定向后通过 key 检索它。

如果这没有帮助,请提供一些更详细的解释(可能有一些代码)

关于ruby-on-rails - Rails 4 session 不会跨请求持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997340/

相关文章:

ruby-on-rails - Rails Arel 选择不同的列

Android Gcm 不适用于 ROR

ruby-on-rails - Elastic Search 与 Sunspot 的功能比较

ruby - 如何模拟已模拟对象的实例方法?

三层架构中的 ASP.Net session 存储提供程序

javascript - 将 Javascript 对象发送到 Rails Controller

Ruby:Twitter API:获取所有关注者

ruby - 遍历数组的前 n 个元素

java - 保存大量动态用户输入

ajax - 抓取使用 ICEfaces 制作的网站( session 因连续的 ajax POST 请求而过期)