西西河

主题:【原创】frame中的cookie被ie拒收 -- 铁手

共:💬6 🌺3
全看分页树展 · 主题
家园 【原创】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 帖 引用 (帖内工具实现)
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河