前後端分離解決session跨域丟失問題

銘記T發表於2018-12-04

最近在做一個簡訊的平臺,採用前後端分離的形式,前端vue,後端tp5,在登陸的時候出現了一個問題,登陸成功之後,拉取資料的介面在判斷登陸時發現獲取不到session_id,導致無法驗證登陸。

首先排錯,在儲存登陸資訊的時候是可以var_dump出session_id的,這就說明session檔案已經生成,但是拉取資料時獲取不到session檔案,原因是:因為是介面形式的訪問,所以介面一定要知道你的登陸和拉取資料是同一個ip地址的請求,才能知道登陸和拉取資料是使用的同一個session檔案。
所以我們要在前後端同時進行配置:
前端配置
在request.js檔案下
增加withCredentials: true

// 建立axios例項
const service = axios.create({
  withCredentials: true,//跨域請求設定
  baseURL: process.env.BASE_API, // api 的 base_url
  timeout: 5000 // 請求超時時間
})

後端配置
Access-Control-Allow-Credentials 響應頭表示是否可以將對請求的響應暴露給頁面。返回true則可以,其他值均不可以。

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

Access-Control-Allow-Origin是HTML5中定義的一種解決資源跨域的策略。一般情況下設定為 * ,但是在這種情況下應該填寫前端頁面的公網地址。例如

header('Access-Control-Allow-Origin: http://127.0.0.1:80880');

這時候再執行登陸完成後,所有的資料介面拉取的請求頭中都會攜帶PHPSESSID,這樣伺服器就可以知道使用的是哪一個session檔案了
在這裡插入圖片描述

在這裡插入圖片描述

相關文章