場景:比如說現在有兩個接口,用戶登入接口a,和獲取用戶資訊接口b。瀏覽器呼叫完全沒有問題,現在要用jq的
ajax
呼叫這兩個接口,就出問題了。
先說瀏覽器。
我在瀏覽器輸入登入介面a位址,傳遞參數,登入成功。服務端(php)將我的用戶id,用戶名等存在session
裡。接下來請求獲取用戶資訊介面b,伺服器直接從session裡找到用戶信息,返回瀏覽器,成功!
再說 ajax。
我在js裡用ajax調用登入接口,返回成功訊息,登入成功。同樣sesion裡存了用戶資料。但是我接下來用ajax呼叫取得使用者資訊介面b的時候,就出問題了,提示session
找不到。
我在控制台裡看了下,瀏覽器登入成功之後,在回應頭裡會返回set-cookie
的信息,下一次請求同一域名下的接口,會自動在請求頭中發送cookie
,從而取得伺服器中session
的資料。
在ajax請求的情況下,登入成功同樣會在回應頭裡會返回set-cookie
的訊息,可是下一次請求同一網域下的接口,卻不會自動傳送cookie
,所以找不到伺服器的session
資料。
那麼問題來了:
我若想拿到session數據,在ajax請求時,是要手動發送cookie嗎?如果不是,怎麼拿到session資料?
求大神解答!
ajax
请求添加参数xhrFields: { withCredentials: true },
php 設定
header('Access-Control-Allow-Credentials:true');
session是依賴cookie的,你伺服器中的cookie存到哪裡了?
就算是你把你客戶端的瀏覽器中的cookie傳過去了,和伺服器中的cookie是否一致啊?
所以說在伺服器中村session就是不行的,你只能是用token來做,而且後台儲存資訊要用redis什麼的。