lizongbo at 618119.com 工作,生活,Android,前端,Linode,Ubuntu,nginx,java,apache,tomcat,Resin,mina,Hessian,XMPP,RPC

2007年12月19日

解决iframe中jsessionid无法传递导致session丢失的问题

Filed under: Java — 标签:, , , — lizongbo @ 08:35

在实现 ISMP2.1.1 接口的适合需要用到sso,而ISMP里定义的接口是需要在iframe等嵌入页面中调用sso接口,在实际开发中发现session无法正常传递。

重现问题的场景是:

1.先访问a站点:http://192.168.18.2/test.jsp

test.jsp的代码为:

<html>
<head>
<title> 618119.com </title>
</head>
<body>
< src=”http://192.168.18.3/sso.jsp?ssoinfo=xxxx“>
</iframe>
</body>
</html>

.jsp里读取传递的ssoinfo,反向调用ISMP认证接口,

生成session,然后放入指定的属性值,

.setAttribute(“ssoUser”,”lizongbo”);
页面再重定向到 http://192.168.18.3/iframe.jsp

response.sendRedirect(“/iframe.jsp”);

iframe.jsp中读取session中ssoUser的属性值,会发现无法读取。
2.如果先访问了 192.168.18.3的页面,再访问192.168.18.2的页面,此时的iframe嵌入是可以传递已生成好的jsessionid Cookie.

因此解决的办法有:

a.在url中加上jsessionid.

例如重定向到 response.sendRedirect(“/iframe.jsp;=lizongbo”);
而这种情况下,如果iframe.jsp页面内的其它连接的url没有加上jsessionid,

也无法继续传递session,不过通过在客户端的js来为每个超连接的href属性重写加上jsessionid.

b.sso.jsp里设置P3P头信息
例如 P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”

或 P3P:CP=”CAO PSA OUR”

java代码为:

response.addHeader(“P3P”,”\”CAO PSA OUR\””);

问题描述及解决办法可参考:

http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q323752

http://blog.csdn.net/mshust2006/archive/2007/06/03/1636807.aspx

http://www.dreamcoder.cn/blog/?p=72

http://www.kingmx.com/article/15061

http://www.dup2.org/node/384

没有评论 »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress