[cookies] 도메인 간 쿠키

두 개의 다른 도메인에 두 개의 webapps WebApp1과 WebApp2가 있습니다.

  1. HttpResponse의 WebApp1에서 쿠키를 설정하고 있습니다.
  2. WebApp2의 HttpRequest에서 동일한 쿠키를 읽는 방법은 무엇입니까?

쿠키는 특정 도메인에만 적용되고 다른 도메인에서 쿠키에 액세스 할 수 없기 때문에 이상하게 들립니다. 그러나 여러 웹 응용 프로그램에서 공유 할 수있는 CROSS-DOMAIN 쿠키에 대해 들었습니다. CROSS-DOMAIN 쿠키를 사용하여이 요구 사항을 구현하는 방법은 무엇입니까?

참고 : J2EE webapps로 시도하고 있습니다.



답변

예, domain2.com을 통해 domain1.com에서 쿠키를 얻는 것이 절대적으로 가능합니다. 소셜 네트워크의 소셜 플러그인에 대해 동일한 문제가 있었으며 하루 동안의 연구 끝에 해결책을 찾았습니다.

먼저 서버 측에서 다음 헤더가 필요합니다.

header("Access-Control-Allow-Origin: http://origin.domain:port");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: Content-Type, *");

PHP 파일 내에서 사용할 수 있습니다 $_COOKIE[name]

둘째, 클라이언트 측에서 :

ajax 요청 내에 2 개의 매개 변수를 포함해야합니다.

crossDomain: true
xhrFields: { withCredentials: true }

예:

type: "get",
url: link,
crossDomain: true,
dataType: 'json',
xhrFields: {
  withCredentials: true
}


답변

다른 사람들이 말했듯이 쿠키를 공유 할 수는 없지만 다음과 같이 할 수 있습니다.

  1. 단일 도메인에서 모든 쿠키를 중앙 집중화하십시오. cookiemaker.com
  2. 사용자가 example.com에 요청하면 cookiemaker.com으로 리디렉션합니다.
  3. cookiemaker.com은 필요한 정보를 사용하여 그를 example.com으로 다시 리디렉션합니다.

물론, 완전히 안전하지는 않으므로 앱간에 일종의 내부 프로토콜을 만들어야합니다.

마지막으로, 모든 요청에서 이와 같은 작업을 수행하면 사용자에게는 매우 성가신 일이지만 첫 번째 경우는 아닙니다.

그러나 다른 방법은 없다고 생각합니다 …


답변

내가 아는 한 쿠키는 “동일한 출처”정책에 의해 제한됩니다. 그러나 CORS를 사용하면 “서버 B”쿠키를 받고 사용하여 “서버 B”의 “서버 A”에서 영구 세션을 설정할 수 있습니다.

그러나 “서버 B”에 헤더가 필요합니다.

Access-Control-Allow-Origin: http://server-a.domain.com
Access-Control-Allow-Credentials: true

그리고 당신은 플래그 “보내야합니다 withCredentials 모든”서버 A “요청에”를 (예를 : xhr.withCredentials = true;)

여기에서 읽을 수 있습니다.

http://www.html5rocks.com/en/tutorials/cors/

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS


답변

도메인 간 쿠키와 같은 것은 없습니다. 당신은 사이에 쿠키를 공유 할 수 foo.example.combar.example.com하지만 결코 사이 example.comexample2.com보안상의 이유로의 것을.


답변

가장 현명한 해결책은 페이스 북의 경로를 따르는 것입니다. 도메인을 방문 할 때 페이스 북은 당신이 누구인지 어떻게 알 수 있습니까? 실제로 매우 간단합니다 .

좋아요 버튼을 클릭하면 Facebook은 클릭 여부에 상관없이 외부 사이트의 모든 방문자를 추적 할 수 있습니다. Facebook은 iframe 을 사용 하여 버튼을 표시 하기 때문에 그렇게 할 수 있습니다 . iframe은 페이지 내의 내장 브라우저 윈도우와 유사합니다. iframe과 버튼에 간단한 이미지를 사용하는 것의 차이점은 iframe에 Facebook의 완전한 웹 페이지가 포함되어 있다는 것 입니다. 이 페이지에는 버튼과 현재 페이지를 좋아 한 사람 수에 대한 정보를 제외하고는 계속 진행되지 않습니다.

따라서 cnn.com에 like 버튼이 표시되면 실제로 Facebook 페이지를 방문하는 것입니다. 이를 통해 Facebook은 컴퓨터에서 쿠키를 읽을 수 있으며 이는 마지막으로 Facebook에 로그인했을 때 생성 된 쿠키입니다.

모든 브라우저의 기본 보안 규칙은 쿠키를 만든 웹 사이트 만 나중에 읽을 수 있다는 것입니다. 이는 iframe의 장점입니다. 다른 웹 사이트를 방문 할 때도 Facebook에서 Facebook 쿠키를 읽을 수 있습니다. 그들이 cnn.com에서 당신을 인식하고 거기에 친구를 표시하는 방법입니다.

출처:


답변

Google이하는 일을하십시오. 3 개의 도메인 모두에 쿠키를 설정하는 PHP 파일을 만듭니다. 그런 다음 테마를 설정할 도메인에서 다른 두 도메인에 쿠키를 설정하는 PHP 파일을로드하는 HTML 파일을 작성하십시오. 예:

<html>
   <head></head>
   <body>
      <p>Please wait.....</p>
      <img src="http://domain2.com/setcookie.php?theme=whateveryourthemehere" />
      <img src="http://domain3.com/setcookie.php?theme=whateveryourthemehere" />
   </body>
</html>

그런 다음 body 태그에 onload 콜백을 추가하십시오. 문서는 이미지가 완전히로드 될 때, 즉 다른 두 도메인에 쿠키가 설정된 경우에만로드됩니다. 부하시 콜백 :

<head>
   <script>
   function loadComplete(){
      window.location="http://domain1.com";//URL of domain1
   }
   </script>
</head>
<body onload="loadComplete()">

setcookie.php

다음과 같은 PHP 파일을 사용하여 다른 도메인에 쿠키를 설정합니다.

<?php
if(isset($_GET['theme'])){
   setcookie("theme", $_GET['theme'], time()+3600);
}
?>

이제 쿠키가 세 도메인에 설정되었습니다.


답변

도메인간에 쿠키를 공유 할 수 없습니다. 그러나 모든 하위 도메인에 액세스 권한을 부여 할 수 있습니다. 모든 하위 도메인에 example.com액세스 할 수있게하려면 도메인을.example.com .

의 쿠키에 otherexample.com대한 액세스 권한을 부여 할 수는 없습니다 example.com.