目前的專案中,使用到了fineuploader 這個純html5上傳元件,在開發過程中將上傳服務單獨放置在特定子網域下.登入cookie設定的domain 是在根網域下,在後端程式碼中進行使用者登入偵測,發現總會被重定向302到未登入頁面,排查之後發現是ajax xhr請求中未帶cookie造成的
網上大概搜了下,
寫道
原生ajax請求方式:
var xhr = new XMLHttpRequest(); xhr.open("POST", "http://xxxx.com/demo/b/index.php", true); xhr.withCredentials = true; //支持跨域发送cookies xhr.send();
的ajax的post方法請求:
$.ajax({ type: "POST", url: "http://xxx.com/api/test", dataType: 'jsonp', xhrFields: { withCredentials: true }, crossDomain: true, success:function(){ }, error:function(){ } })
伺服器端設定:
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://www. xxx.com");
後端進行了相應的調整,前端這塊因為涉及到 fineuploader,在其代碼中簡單搜索了下關鍵字 withCredentials,然後去官方看了下文檔,存在cors 的配置 http: //docs.fineuploader.com/api/options.html#cors
在配置行中加入以下配置就ok了
Js代碼
cors: { allowXdr: true,// 此参数目前不知道有啥用 expected: true, sendCredentials: true }
修改之後,問題解決.