>  기사  >  백엔드 개발  >  javascript - 두 번째 수준 도메인 이름 아래의 쿠키를 얻을 수 있지만 Ajax를 사용하여 자동으로 다시 보낼 수 없고 쿠키가 도메인 간일 수 없는 이유는 무엇입니까?

javascript - 두 번째 수준 도메인 이름 아래의 쿠키를 얻을 수 있지만 Ajax를 사용하여 자동으로 다시 보낼 수 없고 쿠키가 도메인 간일 수 없는 이유는 무엇입니까?

WBOY
WBOY원래의
2016-08-18 09:16:14961검색

시나리오 재발 과정:

<code>机器A局域网地址:192.168.9.8
机器B局域网地址:192.168.9.9
</code>
<code>分别配置机器A、B的hosts地址:

配置机器A的地址:192.168.9.8 --> a.site.com 
配置机器B的地址:192.168.9.9 --> b.site.com
</code>

머신 A는 프런트엔드 js 코드이고 서비스를 시작하며 머신 B의 첫 번째 주소(서버 측을 나타냄)를 요청합니다.
http://b.site.com:8080/ on 브라우저 로그인/..., 서버는 요청과 동시에 쿠키를 삽입합니다.
쿠키 ​​키를 'site'로, 값을 'date'로, 도메인을 .site.com으로, 경로를 /를 검색한 후 서버에서 새 페이지를 열고 새 페이지에서 http://a.site.com:8080/index를 요청하면
http://b.site.com:8080을 볼 수 있습니다. /
크롬 콘솔 쿠키를 통해 주입했는데... Ajax를 통해 인터페이스를 사용할 때 요청 헤더에 쿠키가 나타나지 않습니다. get, post, asynchronous, synchronous 등 다양한 방법을 시도했지만 없음. 그 중 작동합니다. 드디어 jsonp 메소드를 사용했더니 쿠키가 등장했습니다


사용하기 쉽지 않은 코드는 다음과 같습니다.

<code>$("a").click(function(event) {
        $.ajax({
            url: 'http://b.site.com:8080/test/test.htm',
            type: 'post',
            dataType: 'json',
            data: {'token': 'value'},
        })
        .done(function() {
            console.log("success");
        })
        .fail(function() {
            console.log("error");
        })
        .always(function() {
            console.log("complete");
        });
});
</code>
유용한 코드는 다음과 같습니다.

<code>function flightHandler(data) {
    console.log(data);
    // body...
};

$("a").click(function(event) {
    $.ajax({
         type: "get",
         url: "http://b.site.com:8080/test/test.htm",
         dataType: "jsonp",
         jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
         jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
         success: function(data){
            console.log(data);
         },
         error: function(){
             alert('fail');
         }
     });
});
</code>
전문가에게 도움을 요청하여 문제를 해결해 주시면 감사하겠습니다

답글 내용:

시나리오 재발 과정:

<code>机器A局域网地址:192.168.9.8
机器B局域网地址:192.168.9.9
</code>
<code>分别配置机器A、B的hosts地址:

配置机器A的地址:192.168.9.8 --> a.site.com 
配置机器B的地址:192.168.9.9 --> b.site.com
</code>
머신 A는 프런트엔드 js 코드이고 서비스를 시작하며 머신 B의 첫 번째 주소(서버 측을 나타냄)를 요청합니다.

http://b.site.com:8080/ on 브라우저 로그인/..., 서버는 요청과 동시에 쿠키를 삽입합니다.
쿠키 ​​키를 'site'로, 값을 'date'로, 도메인을 .site.com으로, 경로를 /를 검색한 후 서버에서 새 페이지를 열고 새 페이지에서 http://a.site.com:8080/index를 요청하면
http://b.site.com:8080을 볼 수 있습니다. /
크롬 콘솔 쿠키를 통해 주입했는데... Ajax를 통해 인터페이스를 사용할 때 요청 헤더에 쿠키가 나타나지 않습니다. get, post, asynchronous, synchronous 등 다양한 방법을 시도했지만 없음. 그 중 작동합니다. 드디어 jsonp 메소드를 사용했더니 쿠키가 등장했습니다

사용하기 쉽지 않은 코드는 다음과 같습니다.

유용한 코드는 다음과 같습니다.
<code>$("a").click(function(event) {
        $.ajax({
            url: 'http://b.site.com:8080/test/test.htm',
            type: 'post',
            dataType: 'json',
            data: {'token': 'value'},
        })
        .done(function() {
            console.log("success");
        })
        .fail(function() {
            console.log("error");
        })
        .always(function() {
            console.log("complete");
        });
});
</code>

전문가에게 도움을 요청하여 문제를 해결해 주시면 감사하겠습니다
<code>function flightHandler(data) {
    console.log(data);
    // body...
};

$("a").click(function(event) {
    $.ajax({
         type: "get",
         url: "http://b.site.com:8080/test/test.htm",
         dataType: "jsonp",
         jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
         jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
         success: function(data){
            console.log(data);
         },
         error: function(){
             alert('fail');
         }
     });
});
</code>

withCredentials=true, 서버가 교차 도메인을 허용하는지 확인하세요. 자세한 내용은 cors

를 참조하세요.

도메인은 당신이 말하는 것과 다릅니다. 쿠키 도메인과 Ajax 도메인은 같은 것이 아닙니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.