現在專案越來越流行前後端分離,但最近在前後端分離的專案中遇到乙個問題,獲取session裡面存入的使用者資訊總是為null,這是因為實現了前後端分離後跨域導致了會話不一致,由於之前一直沒有做過前後端分離專案,導致走了不少彎路,而且還採用了多種及其不優雅的方法
1.(在第一次請求的時候把伺服器返回的session id儲存起來,後續請求的時候把該session id作為引數傳遞給後端,
後端在每次請求的時候先判斷客戶端傳遞過來的引數中session id是否為空,不為空則設定當前session id為傳遞過來的session id,然後session_start,為空則直接session_start。)
2.後端使用openssl對稱加密來把使用者資訊封裝為乙個token來儲存在前端,在每次請求時來校驗token來確認使用者是否登入,但這樣不僅麻煩還不怎麼安全。
上面那樣做的原因是,ajax請求無法獲取header、cookie等資訊。但是後來發現有更方便的解決方法。ajax請求中可以設定下面兩個引數,瀏覽器會自動幫你儲存、傳送這些header資訊。
xhrfields:
,crossdomain:
true
,
//例
$.ajax(,
//需要設定的引數
crossdomain:
true
,//需要設定的引數
async
:true
,//請求是否非同步,預設為true:非同步,這也是ajax重要特性 可不寫該引數
type:
"get"
,//請求方式型別(put,delete,post,get)
data:
, beforesend:
function()
, success:
function
(data,textstatus)
, complete:
function()
, error:
function()
});
php端需要設定
'';// 允許所有跨域請求,測試用,生產環境請使用具體網域名稱代替
header
('access-control-allow-origin:'
.$origin);
header
('access-control-allow-credentials:true');
header
('access-control-allow-headers:x-requested-with, content-type'
);
前後端專案分離 跨域問題
1.跨域 說明最少有兩個域,才會出現跨的這種情況 2.跨域問題出現的本質 a.網域名稱不同,b.埠號不同,c.協議 不同 3,瀏覽器的同源策略 非位址列請求 如a頁面在a服 務器,b頁面在b伺服器,在a頁面請求b頁面的資訊就會出現跨域問題,目的是為了保證使用者資訊保安 如果a頁面可以獲取b頁面資訊,...
前後端分離跨域問題
access to xmlhttprequest at localhost 8081 user gettoken?username hyly password hyly from origin http localhost 63342 has been blocked by cors policy ...
前後端分離跨域問題
public class loginhandlerinterceptor implements handlerinterceptor response.sendredirect request.getcontextpath login.html catch ioexception e return ...