Heim > Backend-Entwicklung > PHP-Tutorial > javascript - Warum können Cookies unter dem Second-Level-Domainnamen abgerufen, aber nicht automatisch mit Ajax zurückgesendet werden, und warum können Cookies nicht domänenübergreifend sein?

javascript - Warum können Cookies unter dem Second-Level-Domainnamen abgerufen, aber nicht automatisch mit Ajax zurückgesendet werden, und warum können Cookies nicht domänenübergreifend sein?

WBOY
Freigeben: 2016-08-18 09:16:14
Original
1091 Leute haben es durchsucht

Szenario-Wiederholungsprozess:

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

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

Maschine A ist der Front-End-JS-Code, startet den Dienst und fordert die erste Adresse von Maschine B (die die Serverseite darstellt)
http://b.site.com:8080/ an Beim Browser-Login/... fügt der Server gleichzeitig mit der Anfrage Cookies ein.
Setzen Sie den Cookie-Schlüssel auf „site“, den Wert auf „date“, den Domainnamen auf „.site.com“ und den Pfad auf „/“. > und durchsuchen Sie dann eine neue Seite auf dem Server und fordern Sie http://a.site.com:8080/index auf der neuen Seite an. Sie können die Seite
http://b.site.com:8080 sehen /
Injektion über das Chrome-Konsolen-Cookie, aber ... Bei Verwendung der Schnittstelle über Ajax erscheint das Cookie nicht im Anforderungsheader. Ich habe verschiedene Methoden ausprobiert, einschließlich get, post, asynchron und synchron, aber keine von ihnen funktionieren. Schließlich wurde die JSONP-Methode verwendet und das Cookie erschien


Der Code, der nicht einfach zu verwenden ist, lautet wie folgt:

<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>
Nach dem Login kopieren
Nach dem Login kopieren
Der nützliche Code lautet wie folgt:

<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>
Nach dem Login kopieren
Nach dem Login kopieren
Bitte helfen Sie mir, wenn Sie mir helfen können, vielen Dank

Antwortinhalt:

Szenario-Wiederholungsprozess:

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

配置机器A的地址:192.168.9.8 --> a.site.com 
配置机器B的地址:192.168.9.9 --> b.site.com
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Maschine A ist der Front-End-JS-Code, startet den Dienst und fordert die erste Adresse von Maschine B (die die Serverseite darstellt)

http://b.site.com:8080/ an Beim Browser-Login/... fügt der Server gleichzeitig mit der Anfrage Cookies ein.
Setzen Sie den Cookie-Schlüssel auf „site“, den Wert auf „date“, den Domainnamen auf „.site.com“ und den Pfad auf „/“. > und durchsuchen Sie dann eine neue Seite auf dem Server und fordern Sie http://a.site.com:8080/index auf der neuen Seite an. Sie können die Seite
http://b.site.com:8080 sehen /
Injektion über das Chrome-Konsolen-Cookie, aber ... Bei Verwendung der Schnittstelle über Ajax erscheint das Cookie nicht im Anforderungsheader. Ich habe verschiedene Methoden ausprobiert, einschließlich get, post, asynchron und synchron, aber keine davon sie haben funktioniert. Schließlich wurde die JSONP-Methode verwendet und das Cookie erschien

Der Code, der nicht einfach zu verwenden ist, lautet wie folgt:

Der nützliche Code lautet wie folgt:
<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>
Nach dem Login kopieren
Nach dem Login kopieren

Bitte helfen Sie mir, wenn Sie mir helfen können, vielen Dank
<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>
Nach dem Login kopieren
Nach dem Login kopieren

withCredentials=true und stellen Sie sicher, dass der Server domänenübergreifend zulässt. Weitere Informationen finden Sie unter cors

Domain ist nicht das, was Sie sagen. Cookie-Domain und Ajax-Domain sind nicht dasselbe

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage