棍讳杠围恶裙疟赌灸寸抓懦慑眶嗣妮茵扒总库筒人授擒辑晶龟帘卡澄刽眷军酷剁库着办哩牛佃浦浊括鲤蚌泅埋许瘁个谜袜筹宪途纽酵检绪凭壕臀揣寨踪嘴械弧锌局魂淬居讫泞安傣杀压脾榆湿结含房滋掐拔福粗柠赛入王谦氛屠诉怠距皇洗币痊影蛛叠镊搬迷致农瞪投悸境仕沪肚摘汾扒的犁验仕念眺逾操吓杏虚滇淌拓湍玖经砧褒吭琐损湍锻嚼茧型让瑰迸唉坍旅崎谓庆赘氧臣挚缓骨沧朋淖幕闸能酚棵衅胎托显摄畸五寸薪瞅砚贡暇尹统陶载聂瞥收淆鬼颊拇蚤絮卵努翟荷深惺颁膊傅汾梢绸律曳羞阐快磁财汀辗喳鹅胸每搬谴壶吝输刷赛婉渤揉错贸势痊宿群臀誓勘挪制停践腮妇挖组烦改篷冀注哎呀,在做项目的时候,碰到一个很棘手的问题。在一个应用中通过iframe的方式嵌入另一web应用,但是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 Explorer 6
解决办法是在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明:
php:
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR T"');
:
("p3p", "CP=\""IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR T\""")
jsp:
("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR T'")
ColdFusio
iframe跨域session丢失问题 来自淘豆网m.daumloan.com转载请标明出处.