隨著工程的不斷擴大,要部署很多不同的服務,這其中就避免不了cookie的跨域問題,如何實現cookie在不同域之前實現傳輸,本文將詳細描述。
1、path
cookie的域我們如果不設定的話,預設是當前工程,例如:
,那麼它的域為www.test.com,通過domain我們可以設定cookie的域
#通過設定domain
#頂級網域名稱伺服器與二級網域名稱伺服器之間哪個設定都能生效
#設定完畢後寫回到客戶端,用另乙個伺服器即可訪問此cookie
cookie.setdomain("test.com");
我們可以通過nginx反向**,將兩個伺服器網域名稱統一到乙個反向**伺服器。
upstream www.test
.com
server
}
$.ajax(,
datatype: "json",
//設定crossdomain與withcredentials的作用 :
//允許攜帶cookie,不開啟是不能帶cookie到後台的,
//同時後台也不能往前台寫cookie
crossdomain: true,
xhrfields: ,
success: function
(data)
});
最重要的是設定withcredentials: true。
引數crossdomain: true是指傳送ajax時,request header 中會包含跨域的額外資訊,但不會含cookie,建議設定此引數。
因為跨域訪問主要是由後端控制,伺服器端也要設定兩個重要引數
access-control-allow-origin: 控制允許攜帶cookie訪問的域
access-control-allow-credentials: 允許客戶端攜帶證書式訪問
#允許來自所有域的跨域請求訪問
response.setheader("access-control-allow-origin", "*");
#只接收來自的cookie
response.setheader("access-control-allow-origin","");
一般使用以下方式
if ( request.getheader("origin") != null )
}
同時還要設定另乙個重要引數
//如果ajax裡 withcredentials為true,就必須開啟這個選項,
//允許攜帶證書式訪問(允許操作cookie),預設是false
response.setheader("access-control-allow-credentials", "true");
伺服器端 access-control-allow-credentials = true時,引數access-control-allow-origin 的值不能為 *
由於我們頻繁設定 access-control-allow-origin 很不方便,我們可以引入filter,它是在tomcat的lib包下的 catalina.jar 中。
corsfilterfilter-name>
org.apache.catalina.filters.corsfilterfilter-class>
filter>
corsfilterfilter-name>
/*url-pattern>
這樣我們就可以省略以下**了
if ( request.getheader("origin") != null )
}
Cookie跨域操作解決方案Cookie跨域操作
cookie跨域操作解決方案cookie跨域操作 cookie在www主網域名稱下建立,並寫入domain屬性,如 為方便除錯以下 皆為asp code write.asp response.cookies cookiename username sunbird response.cookies c...
解決跨域cookie共享
首先了解一下cookie,cookie有三種型別。第一種,當setcookie不設定過期時間時,cookie儲存在客戶端 記憶體中。關閉瀏覽器即實效。也叫 會話cookie,第二種是設定了過期時間。cookie儲存在客戶端的硬碟中,只有cookie過期的時候才過期,存在硬碟中的cookie,不同的瀏...
Cookie跨域問題的解決
前後端完全分離的專案,前端使用vue axios,後端使用springboot。使用cors協議解決跨域訪問資料限制的問題,但是發現客戶端的axios請求不會自動帶上伺服器返回的cookie jsessionid。導致每乙個axios請求在服務端看來都是乙個新的請求,都會在服務端建立新的sessio...