IE里Iframe的Cookie问题解决办法总结
最近在做一个项目需要用到IFRAME,发现IE在对iframe里面的页面写Cookie的时候有一些安全限制,导致写入和读取Cookie不成功,找了好长时间的解决办法,重要找到如下的办法:
1.页面里的COOKIE不能是浏览器进程的COOKIE(包括验证票和不设置超时时间的COOKIE),否则跨域会取不到.这点做跨域 COOKIE的人比较少提到.不过实际上留意下几家大学做的方案,有细微的提到他们的验证模块里的COOKIE是有设置超时时间的.
2.当利用IFRAME时,记得要在相应的动态页的页头添加一下P3P的信息,否则IE会自觉的把IFRAME框里的COOKIE给阻止掉,产生问题.本身不保存自然就取不到了.这个其实是FRAMESET和COOKIE的问题,用FRAME或者IFRAME都会遇到.
3.测试时输出TRACE,会减少很多测试的工作量.
只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。他们所用的内容是:
P3P: CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'
ASP直接在头部加了头部申明,测试有效。
<%Response.AddHeader "P3P", "CP=CAO PSA OUR"%>
php的话,应该是如下写法:
header('P3P: CP=CAO PSA OUR');
ASP.NET的话
通过在代码上加Response.AddHeader("P3P", "CP=CAO PSA OUR")或者在Window服务中将ASP.NET State Service 启动。
JSP:
response.setHeader("P3P","CP=CAO PSA OUR")
或者
Iframe 中 Cookie 传递不丢失的问题解决 |
[ 2007-7-19 10:51:00 | By: 飞扬人生 ]
|
如果 iframe 另一个页面,登录容易丢失,如博客里采用了二级域名,那么用户在二级域名中不能登录。如果两套系统整合,登录时也容易这样,这是IE的安全限制。这里有一个简单方法解决。
问题描述:我们这边有两个系统,一个OA系统,基于LOTUS的,现在我们用asp.net做了几个应用模块,需要集成到OA系统中,需要实现一个后来隐藏登录,利用iframe 实现,但是发现,iframe 引用的页面,直接通过浏览器是可以访问的,但是通过ifame就不可以了。难道是iframe 的问题。
于是,我google了一下:“iframe cookie ”,竟然有很多人讨论!不久就基本上确认了我当时推测。IE6.0对W3C 关于cookie 的 P3P协议的支持,支持得有些荒唐,几乎成了bug。
有人说,可以设置一下IE的cookie 隐私,就好了,不用对程序做任何改动。但是,总不能要求所有用户这么做吧。
再找,呵呵,问题终于解决了
问题原因: 在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie ,也就是在请求某url时在HTTP header里不发送它们的cookie ,包括session的cookie 。注意,这些站点在response里面设置的cookie 还是会被发送到浏览器的。 解决方法:
对frame里面的引用站点的response header里面添加一个确认信息,在MSDN里面有个最简单的
解决办法:response.addHeader("P3P","CP=CAO PSA OUR")。
所有我们可以通过增加一个网站http头来解决问题;
管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头
然后输入头名:P3P
输入头内容:CP=CAO PSA OUR
注意:可以只选择某一个目录!
好了,ok了
最后,给出一个msdn的参考:
|