我试图关闭httponly在phonegap中使用。我正在使用rails 3.1和design,它们都报告了(但没有记录)这样做的方法,但没有一个工作:
# 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"列仍然被选中。
帮助!
这个小片段似乎可以工作:
Testapp::Application.config.session_store :cookie_store, key: '_testapp_session', :domain => :all, :httponly => false
据我所知,这是rails中的一个bug。也许这个选项被删除了,但文档保留了下来。任何关于这个的想法将是受欢迎的!
我在ActionPack上花了几个小时,找不到任何关于这种配置选项的参考资料——但我仍然不知道它是如何工作的。具体来说,有保存cookie并将其写入头(并传递:httponly => true)的cookiestore,但我无法找到会话如何使用该存储-与模糊的东西,如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