php前后端分離項目跨域問題解決辦法


由於之前一直沒有做過前后端分離項目,導致走了不少彎路,而且還采用了一種及其不優雅的方法

(在第一次請求的時候把服務器返回的session id保存起來,后續請求的時候把該session id作為參數傳遞給后端,

后端在每次請求的時候先判斷客戶端傳遞過來的參數中session id是否為空,不為空則設置當前session id為傳遞過來的session id,然后session_start,為空則直接session_start。)

 

上面那樣做的原因是,ajax請求無法獲取header、cookie等信息。但是后來發現有更方便的解決方法。ajax請求中可以設置下面兩個參數,瀏覽器會自動幫你保存、發送這些header信息。

xhrFields: { withCredentials: true },
crossDomain: true,

 

$.ajax("https://example.com/v2/whatever", {
     method: 'GET',
     xhrFields: { withCredentials: true },
     crossDomain: true,
     success: whatever_success,
     error: whatever_error
});

 

php端需要設置

$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';
// 允許所有跨域請求,測試用,生產環境請使用具體域名代替
header('Access-Control-Allow-Origin:'.$origin);

 

header('Access-Control-Allow-Credentials:true');

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM