【问题标题】:session cookie httponly false rails 3.1会话cookie httponly false rails 3.1
【发布时间】:2012-01-11 05:15:50
【问题描述】:
我正在尝试关闭 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 调试器中检查。
帮助!
【问题讨论】:
标签:
ruby-on-rails
session
cookies
httponly
【解决方案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
【解决方案2】:
这个小 sn-p 似乎可以工作:
Testapp::Application.config.session_store :cookie_store, key: '_testapp_session', :domain => :all, :httponly => false