文章目录
  1. 1. iframe跨域session丢失问题
    1. 1.0.1. iframe跨域session丢失问题

iframe跨域session丢失问题

\

iframe跨域session丢失问题

  • \
  • 最近在做一个系统(A),需要在系统(A)中集成目前现存系统(B)的功能。

  
当然,系统(B)功能在访问时做了登陆限制。(一般性都是:系统登陆后把userId放入session中,在具体的功能页面加入session中userId的判断,
  
如果session中userId不存在,则跳到登陆页,否则继续加载并正常显示功能。)
  
那么,在系统(A)中要访问系统(B)的功能无非是要绕过系统(B)的登陆。(一般的做法是先跳转到系统(B)中的一个页面,在这个页面里将userId塞入session中,
   再自动跳转到实际要访问的功能页面)
   以上做法,在不使用框架结构时,是可行的,确切的说是很简单的。
  
但是如果,系统(A)使用了框架结构,即系统(B)中的功能页面要嵌入到系统(A)的框架中,则会出现一些意想不到的问题,
   确切说是系统(B)跳转到了登陆页面,session丢失了。
   为什么会这样呢?
  
因为应用需求在一个页面的不同frame下面访问不同的域,结果造成了session丢失。
   问题根源:
   IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P)

specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存
在此问题了。Mircosoft对此的具体描述可以参见 Privacy in Internet Explorer
6
  
   解决办法是在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明:
   php:
header(‘P3P:CP=”IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS
OUR IND CNT”‘);

asp.net:
HttpContext.Current.Response.AddHeader(“p3p”, “CP=\“”IDC DSP COR ADM
DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\“””)

jsp:
response.setHeader(“P3P”,”CP=’IDC DSP COR ADM DEVi TAIi PSA PSD IVAi
IVDi CONi HIS OUR IND CNT’”)

ColdFusion:
<cfheader name=”P3P” value=”CP=’IDC DSP COR ADM DEVi TAIi PSA PSD
IVAi IVDi CONi HIS OUR IND CNT’” />

\

\

用<c:url
vaue=”url”/>这种方式生成的url会自动产生jessionid,有可能会把正常的传入地址截掉在中间加上;jessionid=xxxxxxxxx,这时候地址肯定错了

jessionid错误

\

+————————————————————————–+
|

|
| |
| <c:url value=”/“ var=’ctx’/>\ |
| ${ctx}/scripts/york.js\ |
| 就会解析成loveyork/;jsessionid=XXXXXXX/scripts/york.js\ |
| 这样就会出错啦,生成了错误的url(多出了jsessionid)\ |
| \ |
| response.setHeader(“P3P”,”CP=’IDC DSP COR ADM DEVi TAIi PSA PSD IVAi |
| IVDi CONi HIS OUR IND CNT’”);\ |
| \ |
| 这样可以解决 |
| |
|
|
+————————————————————————–+

文章目录
  1. 1. iframe跨域session丢失问题
    1. 1.0.1. iframe跨域session丢失问题