Ajax跨域登錄請(qǐng)求未攜帶cookie錯(cuò)誤解決
背景
重寫一個(gè)登錄頁(yè)面,登錄接口是跨域接口,重寫的頁(yè)面登錄成功后進(jìn)入頁(yè)面報(bào)錯(cuò),原因是請(qǐng)求后臺(tái)接口未攜帶cookie,但是通過(guò)老頁(yè)面進(jìn)行登錄,進(jìn)入頁(yè)面后cookie可以正常攜帶,使用工具對(duì)比新老頁(yè)面登錄請(qǐng)求,request和response都是一樣。
解決
排除過(guò)以下可能性
- 在代碼中進(jìn)行cookie刪除
- 兩個(gè)請(qǐng)求頭不一樣導(dǎo)致結(jié)果不一樣
- 系統(tǒng)時(shí)間設(shè)置錯(cuò)誤,導(dǎo)致cookie過(guò)期
對(duì)比過(guò)兩邊的ajax請(qǐng)求代碼,確實(shí)都是一樣,甚至通過(guò)工具逐個(gè)字節(jié)進(jìn)行對(duì)比也是一樣,最后發(fā)現(xiàn)在老頁(yè)面一個(gè)隱藏的角落有一行這個(gè)代碼
$.ajaxSetup({
dataType: "json",
async: true,
xhrFields: {
withCredentials: true
},
});新頁(yè)面加上后問(wèn)題解決
其中核心的就是withCredentials: true這個(gè)配置,經(jīng)過(guò)查詢官方文檔,了解到如果跨域請(qǐng)求需要帶上cookie必須設(shè)置改參數(shù),官網(wǎng)上是這么描述的
The XMLHttpRequest.withCredentials property is a boolean value that indicates whether or not cross-site Access-Control requests should be made using credentials such as cookies, authorization headers or TLS client certificates. Setting withCredentials has no effect on same-origin requests.
In addition, this flag is also used to indicate when cookies are to be ignored in the response. The default is false. XMLHttpRequest responses from a different domain cannot set cookie values for their own domain unless withCredentials is set to true before making the request. The third-party cookies obtained by setting withCredentials to true will still honor same-origin policy and hence can not be accessed by the requesting script through document.cookie or from response headers.
這里簡(jiǎn)單翻譯下
XMLHttpRequest.withCredentials是一個(gè)boolean類型的屬性,用于跨域請(qǐng)求時(shí)進(jìn)行認(rèn)證,比如cookie,認(rèn)證頭(authorization headers)或者TLS客戶端證書。當(dāng)請(qǐng)求是同域時(shí)該屬性失效。
另外,這個(gè)參數(shù)也表示是否可以忽略響應(yīng)cookie,默認(rèn)是false(也就是忽略cookie),如果沒(méi)有設(shè)置為true,XMLHttpRequest進(jìn)行的跨域請(qǐng)求響應(yīng)的cookie無(wú)法設(shè)置到該域下,設(shè)置withCredentials=true后,同域cookie策略仍然適用于第三方cookie,也就是無(wú)法通過(guò) document.cookie獲取響應(yīng)的cookie。
參考文檔
- https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
- https://api.jquery.com/jquery.ajax/
- http://m.fzitv.net/article/225438.htm
以上就是Ajax跨域登錄問(wèn)題請(qǐng)求未攜帶cookie錯(cuò)誤解決的詳細(xì)內(nèi)容,更多關(guān)于Ajax請(qǐng)求未攜帶cookie的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Ajax實(shí)現(xiàn)跨域訪問(wèn)的三種方法
本文給大家介紹了ajax實(shí)現(xiàn)跨域訪問(wèn)的3種解決方案,非常的實(shí)用,個(gè)人比較推薦第三種,小伙伴們可以著重看下。2015-06-06
ajax實(shí)現(xiàn)分頁(yè)和分頁(yè)查詢
本文主要介紹了ajax實(shí)現(xiàn)分頁(yè)和分頁(yè)查詢的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-03-03
四步輕松實(shí)現(xiàn)ajax發(fā)送異步請(qǐng)求
這篇文章主要教大家輕松實(shí)現(xiàn)ajax發(fā)送異步請(qǐng)求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
ajax讀取properties資源文件數(shù)據(jù)的方法
這篇文章主要介紹了ajax讀取properties資源文件數(shù)據(jù)的方法,實(shí)例分析了基于Ajax實(shí)現(xiàn)讀取properties資源文件數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下2015-06-06
Ajax bootstrap美化網(wǎng)頁(yè)并實(shí)現(xiàn)頁(yè)面的加載刪除與查看詳情
Bootstrap是Twitter推出的一個(gè)開(kāi)源的用于前端開(kāi)發(fā)的工具包,Bootstrap提供了優(yōu)雅的HTML和CSS規(guī)范,它即是由動(dòng)態(tài)CSS語(yǔ)言Less寫成。下面通過(guò)本文給大家介紹Ajax bootstrap美化網(wǎng)頁(yè)并實(shí)現(xiàn)頁(yè)面的加載刪除與查看詳情,需要的朋友可以參考下2017-03-03
簡(jiǎn)單的AJAX實(shí)現(xiàn)(HELLO AJAX)
簡(jiǎn)單的AJAX實(shí)現(xiàn)(HELLO AJAX) ,實(shí)現(xiàn)代碼,主要是了解下,流程。2010-03-03
FormData+Ajax實(shí)現(xiàn)上傳進(jìn)度監(jiān)控
FormData類型其實(shí)是在XMLHttpRequest 2級(jí)定義的,它是為序列化表以及創(chuàng)建與表單格式相同的數(shù)據(jù)(當(dāng)然是用于XHR傳輸)提供便利。接下來(lái)通過(guò)本文給大家分享FormData+Ajax實(shí)現(xiàn)上傳進(jìn)度監(jiān)控,需要的朋友一起看看吧2017-11-11

