西西河

主题:【原创】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 帖 引用 (帖内工具实现)
    • 家园 看了一下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。

      对不?

    • 家园 看看能不能在客户端用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 的问题。

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

分页树展主题 · 全看首页 上页
/ 1
下页 末页


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

Copyright © cchere 西西河