西西河

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

共:💬6 🌺3
全看树展主题 · 分页首页 上页
/ 1
下页 末页
家园 【原创】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 帖 引用 (帖内工具实现)
家园 看看能不能在客户端用javascript设置

你自己也知道,你这种情况浏览器可以拒绝cookie。

你可以看看,把需要的cookie设置搞成javascript, 然后让javascript设置cookie

不过感觉也够呛~~~

家园 大致 Code

服务器生成的页面搞成这样

<script language="javascript">

function setCookie(c_name,value,expiredays)

{

var exdate=new Date();

exdate.setDate(exdate.getDate()+expiredays);

document.cookie=c_name+ "=" +escape(value)+

((expiredays==null) ? "" : ";expires="+exdate.toGMTString());

}

setCookie("<?=$cookieName?>", "<?=$cookieValue?>", null);

</script>

家园 我回头试一下。不过我估计会遇到同样的问题

现在的问题是,在这个服务器上的域名的cookie,如果是在frame中的的话,就会被ie 拒收。如果是在客户端设置,大概会有同样的问题,因为cookie的设置还是在frame中,还是会继续有 privacy policy 的问题。

最重要的是,在其他服务器的域名上都没有问题。肯定是和服务器的设置有关系。就是不知道可能的原因在哪里。

家园 看了一下P3P的介绍 感觉他应该是设置在主页面

看了一下P3P的介绍 感觉他应该是设置在主页面,

也就是那个发送

比如某个页面中包含下面的内容:

<p>none sense</p>

<iframe src="域名甲"></iframe>http://www.ccthere.com/article/1747051

<iframe src="域名乙"></iframe>

<p>more none sense</p>

这个页面的服务器来发送 P3P 的报头。

主页面利用这个P3P的声明告诉浏览器:我的页面里面会包含第三方的网页,第三方会要求设置cookie。

对不?

家园 主页面并不需要。因为子页面可能并不知道主页面是什么
全看树展主题 · 分页首页 上页
/ 1
下页 末页


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

Copyright © cchere 西西河