1. 程式人生 > >解決跨域,session不一致問題

解決跨域,session不一致問題

今天前後互動 的時候發現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