解決https請求下發送http請求問題
阿新 • • 發佈:2019-01-03
在https頁面下的帶有相對路徑的請求都會與頁面的協議保持一致。如果想在https頁面下發送http的請求,如果只把連結寫死成為http的絕對路徑是不夠的,這樣會導致http的請求與總頁面https的請求的session不一致。
為什麼呢?原因是https的請求中伺服器發回的cookie是標記為"secure"的,而http的請求時非"secure","由於在伺服器端secure"的cookie不會相容非"secure"的,所以當http的請求攜帶著同一jsessionid的cookie到達伺服器時,伺服器拒絕非"secure",進而返回的結果是一個新的非"secure"的cookie,於是兩個session就不同了。
怎麼解決呢?由原因分析可知,兩個session不同,更具體說是cookie的狀態不同。那麼辦法是,在接收到第一個https請求的響應後 到 傳送下面的http請求之前,將cookie去"secure"狀態,但是又要保證jsessionid不變。具體操作可以新建一個cookie(新建的是非"secure"狀態),然後賦予同一個jessionid,然後加入response中。
程式碼如下:
Cookie cookie = new Cookie("JSESSIONID", req.getSession().getId());
cookie.setPath(req.getContextPath());
resp.addCookie(cookie);
本文轉載自http://blog.csdn.net/songgeabc/article/details/18192057