首頁 > 後端開發 > php教程 > javascript - 為何 二級網域下cookie可以獲得,卻不能使用ajax自動發回,cookie 不能跨域?

javascript - 為何 二級網域下cookie可以獲得,卻不能使用ajax自動發回,cookie 不能跨域?

WBOY
發布: 2016-08-18 09:16:14
原創
1019 人瀏覽過

情景復現流程:

<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/login/... ,請求的同時伺服器端注入了cookie,
設定cookie 的key為'site',value為'date',doman 為.site.com, path 為/
,然後在瀏覽器上開新頁面並在新頁面請求http://a.site.com:8080/index , 透過chrome控制台可以看到
http://b.site.com:8080/
注入的cookie,但是.......透過ajax走介面的時候,cookie並沒有出現在請求頭,試了多種方式,get、post、非同步、同步都不行。最後使用了jsonp的方式,cookie出現了


不好用的程式碼如下:

<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/login/... ,請求的同時伺服器端注入了cookie,
設定cookie 的key為'site',value為'date',doman 為.site.com, path 為/
,然後在瀏覽器上開新頁面並在新頁面請求http://a.site.com:8080/index , 透過chrome控制台可以看到
http://b.site.com:8080/
注入的cookie,但是.......透過ajax走介面的時候,cookie並沒有出現在請求頭,試了多種方式,get、post、非同步、同步都不行。最後使用了jsonp的方式,cookie出現了


不好用的程式碼如下:

<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

domain不是你說是什麼就是什麼。 Cookie的domain和ajax的domain不是一回事

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板