前段时间在维护项目的时候,应客户要求需要新做一个嵌套到其他网站首页里的登陆小页面,首页是别人的域名,小页面是我们的域名,而且用户登陆处理都在小页面里跳转,首页不刷新或提交,本来原来就有登陆的代码,只需要修改一下展现页面就可以了,可是最终发现没有那么简单,首先是登陆成功后的session中的值在成功页面取不到,还有就是我们在cookie里存取的单点登陆信息也是取不到的,最后Google了一下,并做了一个demo测试通过后,总算修改完成了。汗!!!现在总结一下:
session取不到的问题:
登陆页面上有验证码是放到session中的,则需要在提交的url上追加jsessionid就可以了。
引用image.jsp写法:
<img src="<%=request.getContextPath()%>/webadmin/js/imagecode2.jsp;jsessionid=<%= session.getId()%>" name=Image1 border=0 >
提交地址写法:
form的action="<%=request.getContextPath()%>/webadmin/userselfservice/login/login.do;jsessionid=<%=session.getId()%>"
这样到了Baction中,取得的是同一个session,就可以取得随机验证码.
别以为这样就成功了,还存在一个巨大的陷阱。虽然我们从A平台将session值传递到了B平台,发现在Baction中,添加的 新的session属性(如:用户信息),在Baction之后,B平台其他的页面,居然取不到。这是为何??难道还需要继续传递sessionId不成?的确如此,在以后的页面我们还需要继续传递sessionId。。。。如此下去,系统将混乱不堪。所以我们不能让sessionId这样牵制着我们,我们要消灭它。不错,在Baction之前,我们不得不使用同一个session,但到了B平台操作后,我们将和他断绝关系,这样我们才能自由。在我们进入Baction后将我们需要的session中的值取出,然后销毁它,再创建一个新的session。
request.getSession().invalidate();
HttpSession newSession = request.getSession(true);
我们将需要的值,设置到newSession中即可。
cookie取不到的问题:
只针对ie6才出现这个问题。在你要放置cookie(我们这里使用的是JavaScript的方式放置ssotocken的)的jsp页面上添加一个段代码
<%response.setHeader("P3P","CP=CAO PSA OUR");%>
即可。