天天看點

java多域名共享session_域名間的session共享

最近在做一個jsp的網站遇到了session共享的問題,下面以一個簡單的執行個體講解一下其中的細節及解決方法:

網站有兩個域名:主域名www.test.com  二級域名xxx.test.com

1、用主域名打開網站,比如通路www.test.com/login.jsp,這時會産生一個session,并将JSESSIONID=XXXXXXXXXX儲存到用戶端Cookie中;

2、接着進行登陸操作,送出表單到www.test.com/checklogin.jsp,  這兩次操作是在同一會話(session)下(假設沒關浏覽器),why?

因為我們再通過主域通路站點的其他頁面時,第一步在用戶端生成的JSESSIONID(通過cookie方式,如果cookie被禁了則通過url)會送出到服務端

用于擷取對應的session對象,兩次JSESSIONID一樣,是以兩次的會話保持一緻

3、登陸成功後去到了www.test.com/index.jsp 頁面,頁面列印目前的JSESSIONID=XXXXXXXXXX

4、接着通過二級域名通路index.jsp,即xxx.test.com/index.jsp,這時頁面列印的JSESSIONID=YYYYYYYYYY,也就是說再通過二級域名通路index.jsp

這個頁面時session已經改變了,即剛才的登陸對二級域名下的通路無效了,why?因為通過該二級域名通路index.jsp時,由于無法擷取到主域名生成的JSESSIONID

是以會重新生成一個session,并把JSESSIONID=YYYYYYYYYY儲存到用戶端。

如何解決?

我的解決方法:做一個跳轉頁面skip.jsp

String JSESSIONID = request.getSession().getId();//擷取目前JSESSIONID (不管是從主域還是二級域通路産生)

Cookie cookie = new Cookie("JSESSIONID", JSESSIONID);

cookie.setDomain(".test.com"); //關鍵在這裡,将cookie設成主域名通路,確定不同域之間都能擷取到該cookie的值,進而確定session統一

response.addCookie(cookie);  //将cookie傳回到用戶端

request.getRequestDispatcher("indes.jsp").forward(request, response);

%>

補充:以上涉及cookie及session的了解,如有錯誤,請指正!