主题:【原创】frame中的cookie被ie拒收 -- 铁手
==问题解决了。具体归纳在最后,并总结了一下网上找到的资料。
遇到大难题了。
比如在一个网页中包含若干个 frame ,每个frame是来自不同域名的内容。一般情况下,各个frame里的内容显示都不会有问题,但是,如果某个frame里的页面要设置 cookie,而且这个域名和主页面的域名不同的话,问题就来了。
<p>none sense</p>
<iframe src="域名甲"></iframe>
<iframe src="域名乙"></iframe>
<p>more none sense</p>
如果“域名甲”,“域名乙”都需要设置自己的cookie的话,就会涉及到所谓的第三方cookie问题。Firefox可以允许frame中的cookie设置,没有任何问题。在ie中,缺省设置下,privacy 被设定为 medium,也就意味着frame中“域名甲”,“域名乙”的cookie会被当作第三方cookie被 block 掉,从而无法在各个frame中设置各自域名的cookie。出现这种情况的时候,你会在ie的底部状态条上看到一个眼睛的图示,点击那个图示,就可以看到相关的提示信息。
怎么办?
要求用户修改 privacy 的设置?基本上没有这个可能性,不要说很多人根本就不知道在哪里设置。
在网上搜索、研究了很长一段时间,最后终于找到了大概是唯一的解决途径,就是利用 p3p。在上面的例子中,可以在“域名甲”的页面内容里增加 一些p3p的内容来告诉ie说这个页面没有问题,可以接受cookie。
在 php 中可以:header('P3P: CP="CAO PSA OUR"');
在 asp 中可以:Response.AddHeader "P3P","CP=""CAO PSA OUR"""
其中的 CAO,PSA,OUR 每个代码各自代表一定的privacy policy的含义。选择不同的代码,就可以让浏览器,特别是 ie 来接受frame中的cookie。
奇怪的是,换了一个服务器(域名乙)后,居然就不行了。虽然“域名甲”和“域名乙”的链接内容完全一样,“域名乙”中的cookie被block。查了两个域名页面的 header,都包含P3P的内容。
搞不懂问题在哪里了。程序应该没有问题。难道是服务器,或者是web server的什么地方设置有问题,导致header有问题?
刚才又试验了一下,发现在ie中,frame中的cookie被block,如果单独把frame中的地址拿出来,cookie没有被设置。
邪门邪门。不知道有没有对这方面比较熟悉的,或者有什么想法的?急切需要帮忙。
---最后问题得到了解决。
主要是因为服务器时间设置所出现的错误。服务器时间晚一天,而cookie设置为当前时间60分钟后失效,结果ie认为cookie的时间已经过期,就没有接受cookie,firefox则根据相对时间调整到客户端。
另外,需要设置合适的p3p。
从网上查到的资料显示,如果域名中包含下划线,也会导致ie出现问题。
本帖一共被 1 帖 引用 (帖内工具实现)
- 相关回复 上下关系6
🙂【原创】frame中的cookie被ie拒收
🙂看了一下P3P的介绍 感觉他应该是设置在主页面 肉猫 字386 2008-08-22 00:56:01
🙂主页面并不需要。因为子页面可能并不知道主页面是什么 铁手 字0 2008-08-26 20:28:43
🙂看看能不能在客户端用javascript设置 肉猫 字139 2008-08-22 00:15:35
🙂大致 Code 1 肉猫 字348 2008-08-22 00:21:17
🙂我回头试一下。不过我估计会遇到同样的问题 铁手 字291 2008-08-22 00:32:31