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的理解,如有错误,请指正!

你可能感兴趣的:(java多域名共享session_域名间的session共享)