读书人

session跨域丢失有关问题

发布时间: 2012-12-26 14:39:29 作者: rapoo

session跨域丢失问题

??? 以前做过一个系统,需要在系统(A)中集成目前现存系统(B)的功能。


??? 因为系统B做了权限控制,所以在系统A的数据库建立跟系统B一样的权限表,然后登录系统A后,将用户信息、权限信息等存放进session中,然后在系统B进行权限验证。


???理论上这种设计在不使用框架结构时,完全是可行的。但是如果,系统A使用了框架结构,即系统(B)中的功能页面要嵌入到系统(A)的框架中时,系统B取不到session值了,既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'" />


读书人网 >编程

热点推荐