4

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

# 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,然后重新加载了页面。'Http' 列仍在 chrome 调试器中检查。

帮助!

4

2 回答 2

9

这个小片段似乎有效:

Testapp::Application.config.session_store :cookie_store, key: '_testapp_session', :domain => :all, :httponly => false
于 2011-12-28T17:17:01.470 回答
1

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

我在 ActionPack 上花了好几个小时,但找不到任何关于这种配置选项的参考资料——但我仍然不知道它是如何工作的。具体来说,有一个 cookiestore 保存 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
于 2011-12-03T23:18:28.530 回答