我正在尝试关闭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”列。
帮助!
答案 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