使用p3p简洁策略解决第三方跨域cookie问题

使用p3p简洁策略解决第三方跨域cookie问题 - Q+ PC - Q+开发者论坛 - Powered by Discuz!

    使用p3p简洁策略解决第三方跨域cookie问题

    [复制链接]
           

    584692970

    版主

    Rank: 7Rank: 7Rank: 7

        串个门
        加好友
        打招呼
        发消息

       
    电梯直达

    跳转到指定楼层


    楼主

    发表于 2011-11-4 14:26:50
    |只看该作者
    |倒序浏览
    本帖最后由 584692970 于 2011-11-4 14:29 编辑



    问题

    在Q+环境中,第三方应用经常会遇到这样的问题,无法获取用户登录状态,应用无法正常读写Session数据等。究其原因,是由于第三方应用使用了cookie来记录用户身份,或者使用cookie来保存应用数据。

    那为什么原本在浏览器中一切正常的应用在Q+中就会出现这些问题呢?

    原因

    Q+使用一个iframe包含第三方应用,Q+的vm层的url是vm.qplus.com,与第三方的域是不同的,所以第三方的cookie是跨域cookie。由于Q+使用了ie浏览器的默认隐私设置,如图:



    没有使用隐私策略声明的网站的cookie都是被阻止的。

    解决方法

    在第三方应用的每个http response的header中设置p3p:

    P3P: CP="CURa ADMa DEVa PSAo PSDoOUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP  COR"

    一下是常见后台语言设置p3p精简隐私策略的示例,

    JSP:

    <%

    response.setHeader("P3P","CP=\" CURa ADMa DEVa PSAoPSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR \""); 

    %>

    PHP:

    <?php

    header('P3P: CP=" CURa ADMa DEVa PSAoPSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR "'); 

    ?>

    ASP

    <%

    Response.AddHeader "P3P", "CP= CURa ADMa DEVa PSAo PSDo OUR BUSUNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR "

    %>


    附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册
    本主题由 584692970 于 2011-11-4 14:26:50 置顶
    分享到:

    QQ空间QQ空间
    腾讯微博腾讯微博
    腾讯朋友腾讯朋友

    收藏收藏0
         


    举报

         

    minren

    版主

    Rank: 7Rank: 7Rank: 7

        串个门
        加好友
        打招呼
        发消息

       

    沙发


    发表于 2011-11-14 18:32:26
    |只看该作者
    本帖最后由 minren 于 2011-11-14 18:55 编辑



    也可以通过配置Web Server来添加P3P头



    lighttpd



    server.modules    = ("mod_setenv")



    setenv.add-response-header = ( "P3P" => "CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'")







    apache



    <VirtualHost>

    ....

    Header set P3P 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'

    ...

    </VirtualHost>



    IIS



    管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头

    然后输入头名:P3P

    输入头内容:CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR



    如果没有权限配置IIS服务器,但是你用的是asp.net的话



    可以用httpmodual来实现在全部页面或者部分页面头部插入所需要的标志

原文地址:https://www.cnblogs.com/lexus/p/2479584.html