跨域ajax請求中的cookie傳輸問題

CORS是一個(gè)W3C標(biāo)準(zhǔn),全稱是"跨域資源共享"(Cross-origin resource sharing)。
它允許瀏覽器向跨源服務(wù)器發(fā)出XMLHttpRequest請求锭吨,從而克服了AJAX只能同源使用的限制初家。
對CORS協(xié)議不了解的同學(xué),可以猛擊這里坷牛。

今天我們來討論其中的cookie傳輸問題罕偎。

場景:

http://a.com/test.html向
http://b.com/test.php
發(fā)起ajax請求。

test.php種cookie name:ball
test.html第二次發(fā)起請求時(shí)漓帅,希望將cookie(name:ball)帶給test.php锨亏。

1. 實(shí)現(xiàn)

代碼如下:

a.com/test.html

<body>
    <script src="/jquery.min.js"></script>
    <script>
        var url = "http://b.com/test.php";
        $.ajax({
            url:url,
            type:"GET",
            xhrFields:{
                withCredentials:true
            },
            success:function(res){ 
                console.log(res);
            }
        })    
    </script>
</body> 

說明:

  • withCredentials:true是關(guān)鍵。只有加上此選項(xiàng)忙干,瀏覽器才會允許跨域攜帶cookie器予。

b.com/test.php

header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://a.com");
if (count($_COOKIE)){
    echo json_encode($_COOKIE);
}
else{
    header("Set-Cookie:name=ball;path=/");
}

說明:

- Access-Control-Allow-Credentials: true

與瀏覽器側(cè)的withCredentials:true成對使用,表明服務(wù)端許可發(fā)cookie捐迫。

- Access-Control-Allow-Origin: http://a.com

表示服務(wù)端接收a.com的請求乾翔。如果請求時(shí)不需要帶cookie,此字段可以寫*施戴,表明該站接收所有來源的ajax請求反浓。如果需要傳輸cookie, 該字段只能寫一個(gè)固定來源。

訪問test.html赞哗,第二次時(shí)如愿在console里看到

{"name":"ball"}

這說明:

  1. b.com成功種下了cookie
  2. a.com成功在跨域ajax請求中帶上了cookie

2. 探討

2.1 test.php是將cookie是種到了a.com下還是b.com下呢雷则?

我們在a.com和b.com下分別添加
cookie.php

var_dump($_COOKIE);

執(zhí)行后發(fā)現(xiàn),a.com下的cookie.php輸出為空肪笋。cookie其實(shí)是種到了b.com下月劈。

2.2 服務(wù)端單方面種cookie是否會成功?

既然2.1中的結(jié)論是cookie種到了b.com下度迂,那么在發(fā)ajax請求時(shí)去掉

xhrFields:{
    withCredentials:true
}

test.php是否能成功在b.com下種cookie呢?
修改代碼后執(zhí)行test.html,test.php在Response Headers中依然種了cookie猜揪,如下圖所示惭墓。


image

然后我們訪問

b.com/cookie.php

發(fā)現(xiàn)cookie并沒能如愿種下。

2.3 a.com能否把自己域下的cookie帶給b.com?

我們在a.com下事先種下cookie:name=x
訪問test.html, 如下圖所示


image

Resquest Headers中只帶了b.com下的name=ball而姐。并沒有發(fā)送a.com下的cookie

2.4 a.com/test.html會因此能讀到b.com下的cookie么腊凶?

我們訪問a.com/test.html, 然后打開控制臺。執(zhí)行document.cookie拴念,結(jié)果空空如野钧萍。

3. 總結(jié)

  1. A站向B站發(fā)起跨域ajax時(shí),只能攜帶B站下的cookie給B丈莺。
  2. B站只有在A站允許的情況下划煮,才能在跨域ajax中向自己的域下種cookie。
  3. 即使A,B站達(dá)成cookie傳輸協(xié)議缔俄,A站頁面也不會因此能拿到B站的cookie弛秋。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市俐载,隨后出現(xiàn)的幾起案子蟹略,更是在濱河造成了極大的恐慌,老刑警劉巖遏佣,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挖炬,死亡現(xiàn)場離奇詭異,居然都是意外死亡状婶,警方通過查閱死者的電腦和手機(jī)意敛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膛虫,“玉大人草姻,你說我怎么就攤上這事∩缘叮” “怎么了撩独?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長账月。 經(jīng)常有香客問我综膀,道長,這世上最難降的妖魔是什么局齿? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任剧劝,我火速辦了婚禮,結(jié)果婚禮上抓歼,老公的妹妹穿的比我還像新娘讥此。我一直安慰自己示绊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布暂论。 她就那樣靜靜地躺著,像睡著了一般拌禾。 火紅的嫁衣襯著肌膚如雪取胎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天湃窍,我揣著相機(jī)與錄音闻蛀,去河邊找鬼。 笑死您市,一個(gè)胖子當(dāng)著我的面吹牛觉痛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茵休,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼薪棒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了榕莺?” 一聲冷哼從身側(cè)響起俐芯,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钉鸯,沒想到半個(gè)月后吧史,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唠雕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年贸营,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岩睁。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钞脂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笙僚,到底是詐尸還是另有隱情芳肌,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布肋层,位于F島的核電站亿笤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栋猖。R本人自食惡果不足惜净薛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒲拉。 院中可真熱鬧肃拜,春花似錦痴腌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猛蔽,卻和暖如春剥悟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曼库。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工区岗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毁枯。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓慈缔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親种玛。 傳聞我的和親對象是個(gè)殘疾皇子藐鹤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)赂韵。 注意:講述HT...
    kismetajun閱讀 27,422評論 1 45
  • 什么是跨域 跨域教藻,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的右锨,是瀏覽器對JavaScript實(shí)...
    HeroXin閱讀 831評論 0 4
  • 什么是跨域 跨域括堤,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的绍移,是瀏覽器對JavaScript實(shí)...
    他方l閱讀 1,059評論 0 2
  • 什么是跨域 跨域悄窃,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的蹂窖,是瀏覽器對JavaScript實(shí)...
    Yaoxue9閱讀 1,286評論 0 6
  • 暮靄沉沉轧抗, 夕陽抹盡了相思的云。 寺影深深瞬测, 烏云吞掩了離殤的痕横媚。 天地終將一吻, 正如輪回必定難舍難分月趟。 是誰執(zhí)...
    宋云蕭閱讀 285評論 2 1