code

Facebook은 캔버스 페이지의 iFrame에 대한 교차 도메인 쿠키를 어떻게 설정합니까?

codestyles 2020. 11. 12. 08:15
반응형

Facebook은 캔버스 페이지의 iFrame에 대한 교차 도메인 쿠키를 어떻게 설정합니까?


캔버스 응용 프로그램에 대한 Facebook의 문서를 탐색하고 있었고 예제 응용 프로그램을 발견했습니다. http://developers.facebook.com/docs/samples/canvas . 그러나 그들의 예를 읽으면서 iframe 응용 프로그램에서 쿠키를 사용하는 것에 대해 매우 혼란스러워했습니다.

약간의 배경 이야기 ...

나는 이미 삽입 가능한 위젯 (Facebook과 관련이 없음)에 iframe을 사용하여 놀았고 몇 가지 브라우저 (Chrome, Safari 등)가 엄격한 쿠키 정책을 가지고 있으며 iframe에 설정된 교차 도메인 쿠키를 허용하지 않는다는 것을 발견했습니다 (Firefox, 반면에 iframe에서 iframe에서 교차 도메인 쿠키를 설정할 수 있습니다.) 예를 들어, foo.com src="http://bar.com/widget"에 iframe 위젯 이있는 iframe이있는 경우 bar.com에 대한 쿠키를 설정할 수 없으므로 iframe 내에서 상태를 유지하는 데 문제가 있습니다. bar.com은 다음의 모든 요청 (Ajax 요청 포함)을 해석합니다. 세션이 설정되지 않은 새로운 요청으로 위젯. 나는 고생했고 JSONP와 자바 스크립트를 사용하여 대신 foo.com에 대한 쿠키를 설정하여이 문제를 해결하는 방법을 찾았습니다.

... 그래서?

글쎄, 나는 예제 캔버스 iframe Facebook 응용 프로그램을보고 있었고 응용 프로그램 (runwithfriends.appspot.com에서 호스팅 됨)이 u현재 사용자의 ID와 함께 runwithfriends에 대한 몇 가지 다른 매개 변수와 함께 쿠키를 설정할 수 있음을 알았습니다. appspot.com 도메인. 모든 요청과 함께이 쿠키를 전송하며 Chrome과 Firefox 모두에서 작동합니다! WTF? Facebook은 Chrome의 교차 도메인 쿠키 제한을 어떻게 피합니까?

(나는 이미 답을 알고 있지만, 같은 것을 파악하는 데 어려움을 겪는 모든 사람들에게 도움이 될 것이라고 생각했습니다. 아래 답변을 게시하겠습니다.)


따라서 iFrame은 실제로 urunwithfriends.appspot.com 도메인에 대한 쿠키를 설정하지 않습니다 . Facebook이하는 일은 양식을 만들고 <form action="runwithfriends.appspot.com/..." target="name_of_iframe" method="POST">javascript를 사용하여 페이지로드시 양식을 제출하는 것입니다. 양식의 대상이 iframe이므로 페이지를 다시로드하지 않고 POST의 응답과 함께 iframe 만로드합니다. 분명히 엄격한 쿠키 정책을 사용하는 Chrome 및 기타 브라우저조차도 POST 요청 인 경우 교차 도메인 요청에 대해 쿠키를 설정합니다.

참고 URL : https://stackoverflow.com/questions/4701922/how-does-facebook-set-cross-domain-cookies-for-iframes-on-canvas-pages

반응형