82

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

少し裏話...

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

... など?

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

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

4

1 に答える 1

87

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

于 2011-01-15T21:00:13.670 に答える