1 问题描述
环境:两台服务器(A服务器,B服务器)
应用:两个应用(C系统,D系统)
其中C系统部署在A服务器,D系统部署在B服务器
D系统是要从C系统登录
D系统要从C系统Session取两个值到D系统session中
症状
如果您实现的 FRAMESET 其框架指向您的合作伙伴或在您的网络,内部网络上其他 Web 站点但使用不同的顶级域名,您可能会注意到在 Internet Explorer 6 中您尝试在这些框架中设置任何 Cookie 似乎丢失。 这是最常遇到作为一个 Active Server Pages (ASP) 或 ASP.NET Web 应用程序中的会话状态的丢失。 您尝试访问您希望存在,而返回一个空白字符串 Session 对象中的变量。
您还了解一个框架上下文中的这一问题如果您的网页使用域名系统 (DNS) 名称和 Internet 协议 (IP) 地址的使用之间交替。
2 问题解决
添加一个 response.addHeader("P3P","CP=CAO PSA OUR");
在D系统有这样一个logon .jsp
- <%
- String userid = (String) request.getParameter("userid");
- String password = (String) request.getParameter("password");
- session.setAttribute("userid", userid);
- session.setAttribute("password", password);
- System.out.println("userid" + userid);
- System.out.println("password" + password);
- out.print("Session var is " + session.getAttribute("TestVar"));
- session.setAttribute("TestVar","Hello, world!");
- response.addHeader("P3P","CP=CAO PSA OUR");
- %>
在C系统只要调用
- <iframe src="http://128.128.1.1:8080/Test/logon.jsp&userid=?&password=?"></iframe>
将userid和password取出来放进去即可。
如果没有 response.addHeader("P3P","CP=CAO PSA OUR"); 将会导致session丢失,在D系统取不到session值,虽然已经赋值进去
3 问题重现
重现该问题的步骤
1. 创建一个文件名称 TestFrameset.asp。
2. 点框架的一个文件到另一台计算机在您的网络上的 IP 地址的: <HTML>
<FRAMESET ROWS="100%,*">
<FRAME src="</frame">http://111.111.111.111/testFrame.asp"></FRAME>
<FRAME src="about:blank"></FRAME>
</FRAMESET>
</HTML>
3. on remote computer,like following example create TestFrame.asp: <HTML>
<BODY>
<%
Response.write "Session var is " & Session("TestVar")
Session("TestVar") = "Hello, world!"
%>
<BODY>
<FORM METHOD="POST">
<INPUT type="submit" value="Print TestVar">
</FORM>
</BODY>
</HTML>
4. 将移动到 TestFrameset.asp,然后单击 窗体提交 。
请注意,尽管它应该包含 Session("TestVar") 项打印为空,提交后的"Hello,世界 !"。
参考:
http://support.microsoft.com/kb/323752/zh-cn