web-dev-qa-db-ja.com

FacebookはキャンバスページのiFrameにクロスドメインCookieをどのように設定しますか?

キャンバスアプリケーションについて読んでいるFacebookのドキュメントを閲覧していて、サンプルアプリケーションに遭遇しました: http://developers.facebook.com/docs/samples/canvas 。しかし、彼らの例を読んでいると、iframeアプリケーションでのクッキーの使用について非常に混乱しました。

少しバックストーリー...

組み込み可能なウィジェット(Facebookとは無関係)にiframeを使用して既に遊んでいたが、いくつかのブラウザー(Chrome、Safariなど)には厳格なCookieポリシーがあり、iframeに設定されたクロスドメインCookie(Firefox、一方、iframeがiframeにクロスドメインCookieを設定できるようにします)。たとえば、foo.comにsrc="http://bar.com/widget"のiframeがある場合、iframeウィジェットはbar.comのCookieを設定できないため、iframe内での状態の維持に問題が発生します。bar.comはすべてのリクエストを解釈します(セッションを確立せずに新しいリクエストとしてウィジェットからのAjaxリクエストを含む)。私は苦労し、代わりにJSONPとjavascriptを使用してfoo.comのCookieを設定することでこの問題を回避しました...

... など?

さて、私はサンプルのキャンバスiframe Facebookアプリケーションを見ていましたが、彼らのアプリケーション(runwithfriends.appspot.comでホストされている)は、現在のユーザーのIDといくつかのCookieでuを設定できることに気付きましたrunwithfriends.appspot.comドメインの他のパラメーター。すべてのリクエストでこのCookieを送信します...そして、ChromeとFirefox!WTFの両方で動作しますか?Facebookは、ChromeのクロスドメインCookie制限をどのように回避しますか?

(私はすでに答えを知っていますが、これは同じことを理解するのに苦労している人には役立つかもしれないと思いました-私は下に答えを投稿します。)

65
Aaron Gibralter

したがって、iFrameは実際にrunwithfriends.appspot.comドメインのu Cookieを設定していません。 Facebookは、フォームを作成します<form action="runwithfriends.appspot.com/..." target="name_of_iframe" method="POST">およびJavaScriptを使用して、ページの読み込み時にフォームを送信します。フォームのターゲットはiframeであるため、ページはリロードされません... POSTの応答でiframeをロードするだけです。どうやらChromeと、厳密なCookieポリシーを備えた他のブラウザは、POST要求...

67
Aaron Gibralter