4

phonegap で使用するために httponly をオフにしようとしています。私は 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 を削除し、ページをリロードしました。「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 で数時間を費やしましたが、そのような構成オプションへの参照を見つけることができませんでしたが、それがどのように機能するかについての全体像はまだありません. 具体的には、Cookie を保持してヘッダーに書き込む (そして :httponly => true が渡される) cookiestore がありますが、セッションがストアをどのように使用しているかを見つけることができませんでした。言わずと知れたゴーストタウン。

仕事をするミドルウェアをハックしました:

# 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 に答える