2014-02-28 2 views
5

AngularJS에서 내 하위 도메인에 내 Restful API가 있지만 쿠키/세션이 도메인간에 공유되지 않는 문제가 있습니다. 각도를 들어 나는이 일을 오전 : 또한AngularJS withCredentials가 전송되지 않음

app.config(['$httpProvider', 
function($httpProvider) { 
    $httpProvider.defaults.useXDomain = true; 
    $httpProvider.defaults.withCredentials = true; 
    delete $httpProvider.defaults.headers.common['X-Requested-With']; 
}]); 

나는 $와 요청을하고 때 HTTP 내가

var object = {}; 

object.url = '/example' 
object.withCredentials = true; 

$http(object).success(object.success).error(object.error); 

을하고 그리고 내 서버 측에서하고 내가 가진 : 이제

if($_SERVER['REQUEST_METHOD']=='OPTIONS') { 
    if(isset($_SERVER['HTTP_X_FOWARDED_HOST']) && !empty($_SERVER['HTTP_X_FOWARDED_HOST'])) { 
     $origin=$_SERVER['HTTP_X_FOWARDED_HOST']; 
    } else { 
     $origin=$_SERVER['HTTP_ORIGIN']; 
    } 
    if(isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && ($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='POST' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='DELETE' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='PUT')) { 
     header('Access-Control-Allow-Origin: '.$origin); 
     header('Access-Control-Allow-Credentials: true'); 
     header('Access-Control-Allow-Headers: *,X-Requested-With,Content-Type'); 
     //header('Access-Control-Allow-Headers: Content-Type'); 
     header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT'); 
     // http://stackoverflow.com/a/7605119/578667 
     header('Access-Control-Max-Age: 86400'); 
    } 

} 

서버에서 자격 증명을 허용하지만 옵션 요청에서 전송되지 않는다고 말합니다. 아래 스크린 샷.

enter image description here 내가 뭘 잘못하고 있니?

답변

11

기본적으로 자격 증명은 CORS 비행 전 옵션 요청으로 전송되지 않습니다. See here. 이 내용은 answer을 참조하십시오. 자격 증명은 실제 요청에 따라 전송됩니다.

또한 XDomain 및 X-Request-With 헤더는 현재 각 버전에서 실제로 사용되지 않으므로이 줄은 $ httpProvider 구성에서 아무 작업도 수행하지 않습니다. 모든 CORS 상호 작용은 브라우저 자체와 서버에서 처리됩니다.

일반적으로 CORS를 올바르게 구현하려면 서버에서 프리 플라이트 요청에 대한 자격 증명이 필요하지 않아야합니다. OPTIONS 요청은 "안전한"것으로 간주되고 절대로 기밀 정보가 포함되어서는 안되기 때문에 이러한 경우가 있습니다 (일부 브라우저는 어쨌든이를 전송하지만 일부는 전송하지 않음).

도메인간에 공유하려는 쿠키에 문제가있을 수 있습니다. 어떤 쿠키를 어디로 보내려고하십니까?

+0

SSO 쿠키 할당이 설정되어 있습니다. 그래서 세션 ID 확인 전에 CORS 옵션 검사를 받아 해결했습니다. 옵션 인 경우 SSO에 대한 세션 ID 확인을 실행하지 않습니다. 그렇지 않으면 전송 된 쿠키를 사용하십시오. –

관련 문제