由於之前一直沒有做過前后端分離項目,導致走了不少彎路,而且還采用了一種及其不優雅的方法
(在第一次請求的時候把服務器返回的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');