Web - Cookie & Session,從Laravel前後端分離遇到的問題說起

從利用PHP的框架Laravel5.2開發後端api說起,前端的應用與api是分離的,本來一起都很順利,後來部署到ci上時,前端配置了域名,後端的api通過IP地址訪問,當然後端的api配置了cors來允許跨域,這時api層的session都失效了。可以觀察到的現象是,登錄時session設置成功,然而在其它api檢查session中存儲的登錄用戶信息時,卻爲null。

再次檢查,發現瀏覽器發出的請求根本沒有攜帶cookie,爲啥原本在一個ip下,不存在跨域問題的時候,cookie是自動攜帶的,而不同域的時候卻不攜帶了呢?

現象描述:也就是前端在a.com域名,發出的請求的域名是b.com,此時b.com中設置了session,a.com再次訪問b.com時,發現session不起作用。

這是因爲:除非將前端ajax請求中的withCredentials設置爲true,否則XMLHttpRequest不會攜帶一個不同域名的cookie。而且,使用cors實現跨域時需要設置返回HTTP的”Access-Control-Allow-Credentials“頭設置爲true,並且,”Access-Control-Allow-Origin“頭的值不能設置爲”*“了,必須制定特定的值或多個值進行過濾,該值就是前端應用所在的域名。

所以問題的解決方法需要前後端都作出相應修改:

1. 前端發出的請求需要設置 withCredentials爲true;

2. CORS中將”Access-Control-Allow-Credentials“頭設置爲true,”Access-Control-Allow-Origin“頭的值不能設置爲”*“,設置爲前端的域名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章