会话cookie httponly false rails 3.1

时间:2011-12-02 04:42:33

标签: ruby-on-rails session cookies httponly

我正在尝试关闭httponly以用于phonegap。我正在使用rails 3.1和devise,每个都报告了(但没有记录)这样做的方法,其中没有一个工作:

# application.rb
config.session_options = { :httponly => false } # no effect
config.session = { :httponly => false } # undefined method `session='


# devise.rb
config.cookie_options = { :httponly => false } # also no effect

测试我重新启动服务器,删除现有的cookie,然后重新加载页面。仍然在chrome调试器中检查了“Http”列。

帮助!

2 个答案:

答案 0 :(得分:7)

这个小小的片段似乎有效:

Testapp::Application.config.session_store :cookie_store, key: '_testapp_session', :domain => :all, :httponly => false

答案 1 :(得分:1)

据我所知,这是rails中的一个错误。也许该选项已被删除,但文档仍然存在。欢迎提出任何想法!

我花了几个小时的时间使用ActionPack,并且找不到任何对这种配置选项的引用 - 但我仍然没有全面了解它是如何工作的。具体来说,有cookie存储cookie并将它们写入标题(并传递给:httponly => true),但我无法找到会话如何使用商店 - 与Rails SessionManage模块之类的含糊不清的东西一个众所周知的鬼城。

我破解了一个完成这项工作的中间件:

# application.rb:
    config.middleware.insert_before ActionDispatch::Cookies, "UnshieldCookie" # remove httponly. 

# unshielded_cookie.rb
class UnshieldCookie
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)

    headers['Set-Cookie'].gsub!('HttpOnly', '') if headers['Set-Cookie'].present?

    [status, headers, body]
  end
end