解決跨域,session不一致問題
阿新 • • 發佈:2019-02-19
今天前後互動 的時候發現session的id不一致。(我的邏輯是這樣的,使用者登入,賬號密碼都正確的時候,我就把使用者資訊放到session裡面去,後續各種操作例如:獲取使用者資訊等等。就不需要傳遞uid了。)
我這邊後臺伺服器啟動,前端進行介面對接的時候,後臺一直獲取不到值。最後發現request裡有值,session也有值,但是session的id卻不一致。想來想去不知道怎麼回事。後來無意間想到跨域,以前解決過跨域問題,就是在fitter里加上
response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, Access-Token");
第一行,意思是執行從所有地址發來的請求。
第二行,意思是允許 POST, GET, OPTIONS, DELETE,這些方式的請求
第三行,意思是在該響應在多少秒內有效
第四行,意思是允許的請求頭型別
可是對於今天的問題還是報錯了。
那麼從新來設定
注意:response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "0"); response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token,Access-Control-Allow-Headers"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("XDomainRequestAllowed","1");
Access-Control-Allow-Credentials 是true的時候。 Access-Control-Allow-Origin"的值不能為*。
同時
在ajax 請求是也要加相應的東西
$.ajax({
url:url,
//加上這句話
xhrFields: {
withCredentials: true
},
crossDomain: true,
success:function(result){
alert("test");
},
error:function(){
}
});
這樣我們再跨域測試的時候,就會發現我們的sessionId是一樣的了,這樣就實現了跨域並且保證在同一個session下 |
以上,解決問題。
參考:http://www.cnblogs.com/renhaisong/p/6892341.html
http://blog.csdn.net/wzl002/article/details/51441704
http://www.julyme.com/20161110/23.html