`

通过设置P3P头来实现跨域访问COOKIE

阅读更多

作者:老王

网上看了别人介绍的一片文章,说使用P3P可以完成跨域COOKIE操作,感觉很COOL,不过没有提供源代码,我胡乱写了一下,大家看看。

实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能。

我只写一个大概,为了测试的方便,先编辑hosts文件,加入测试域名(C:\WINDOWS\system32\drivers\etc\hosts)

127.0.0.1       www.a.com
127.0.0.1       www.b.com

首先:创建 a_setcookie.php 文件,内容如下:

<?php 
//header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); 

setcookie("test"
$_GET['id'], time()+3600"/"".a.com"
); 
?>

然后:创建 a_getcookie.php 文件,内容如下:

<?php 
var_dump
($_COOKIE
); 
?>
 

最后:创建 b_setcookie.php 文件,内容如下:

<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>

----------------------------

三个文件创建完毕后,我们通过浏览器依次访问:

http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。

然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:

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

setcookie("test"$_GET['id'], time()+3600"/"".a.com"
);  
?> 

再次通过浏览器依次访问:

http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。

末了补充一句,似乎只有IE对跨域访问COOKIE限制比较严格,上述代码在FIREFOX下测试,即使不发送P3P头信息,也能成功。不过IE是老大啊。

参考文档:http://www.w3.org/P3P/

分享到:
评论

相关推荐

    P3P Header解决Cookie跨域的问题

    在JavaScript中,可以通过设置XMLHttpRequest对象的请求头来应用P3P策略。例如: ```javascript xmlhttp.setRequestHeader("P3P", 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE ...

    iframe 跨域访问session

    2. **CORS(Cross-Origin Resource Sharing)**:CORS是一种现代的跨域访问控制机制,允许服务器通过设置特定的HTTP响应头来指定哪些源可以访问其资源。虽然主要用于API接口,但也可以应用于`iframe`。不过,CORS并...

    P3P 和 跨域 (cross-domain) cookie 访问(读取和设置)

    例如,在IE浏览器中,若要在跨域情况下设置cookie,可以通过在服务器端的响应头中添加P3P策略声明,这样浏览器就能根据P3P声明的隐私政策来决定是否允许跨域cookie访问。 根据提供的文档内容,实现跨域cookie设置的...

    关于Iframe如何跨域访问Cookie和Session的解决方法

    总结来说,解决Iframe跨域访问Cookie和Session的关键在于理解和利用浏览器的特性,如P3P协议,以及巧妙地调整代码结构。同时,对于Session的管理,要意识到它与Cookie之间的关联性。在多系统集成的场景下,这些技巧...

    PHP如何利用P3P实现跨域

    有别于JS跨域、IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域。P3P是什么P3P(Platform for Privacy Preferences)是W3C公布的一项隐私保护推荐标准,以为用户提供隐私保护。 P3P标准的构想是:Web 站点的...

    跨域页面访问问题解决.doc

    P3P 认证可以通过在服务器端设置 HTTP 头来实现,例如在 Java 中,可以使用以下代码来实现 P3P 认证: response.setHeader("P3P","CP=CAO PSA OUR"); 知识点四:跨域信息采集的定义和原因 跨域信息采集是指使用 ...

    asp.net(C#)跨域及跨域写Cookie问题

    解决方法是: 代码如下: //www.B.com里的被调用的页面需要写P3P头,从而解除IE对写Cookie的阻止 context.Response.AddHeader(“P3P”, “CP=CAO PSA OUR”); //www.A.com里通过ajax调用www.B.com里的内容时,是跨域...

    跨域访问的单点登录案例

    但通过设置P3P(Platform for Privacy Preferences)政策,可以让浏览器接受跨域Cookie,实现SSO。 6. **CORS(Cross-Origin Resource Sharing)**: CORS是浏览器提供的机制,用于控制不同源之间的资源访问。在...

    iframe跨域与session失效问题的解决办法

    通过这种方式,可以解决在IE浏览器中由于P3P隐私设置导致的iframe跨域cookie丢失问题,进而解决session失效导致的用户频繁重新登录的问题。这个方法在技术上是可行的,但需要网站管理员操作,确保P3P声明符合实际的...

    Yii2下session跨域名共存的解决方案

    P3P允许跨域设置cookie,通过在响应头中添加特定的P3P政策,浏览器会允许设置cookie。在PHP中,可以添加以下代码来设置P3P头: ```php header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE...

    处理session跨域几种方案

    - **P3P协议**:对于不同顶级域名,浏览器默认不允许跨域设置Cookie。但通过添加P3P头(Privacy Policy Platform),如`header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE...

    iframe跨域嵌套自适应高度

    - **P3P头设置**:对于IE浏览器,需要正确设置P3P头以允许cookie跨域传输。P3P (Platform for Privacy Preferences) 是一种隐私保护标准,通过设置`CP=CAO PSA OUR`这样的P3P策略,可以告知浏览器该网站遵守特定的...

    Session跨域共享demo

    - **HTTP头部传递SessionID**:对于不支持Cookie的环境,可以通过HTTP头部`P3P`或`Set-Cookie2`来传递SessionID。 3. **ASP.NET中的实现** 在ASP.NET中,我们可以自定义SessionStateStoreProvider来扩展默认的...

    【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx

    在 ASP.NET 开发中,跨域和 Session 失效问题是一个常见的问题,但通过添加“P3P”协议和使用 HttpContext.Current.Session,我们可以解决这个问题,从而确保应用程序的正常运行。 相关知识点: * 跨域和 Session ...

    asp.net关于Cookie跨域(域名)的问题

    我们知道cookie是可以跨二级域名来访问,这个很好理解,例如你 www.test1.com 在的web应用程序创建了一个cookie,要想在bbs.test1.com这样的二级域名对应的应用程序中访问,就必须你在创建cookie的时候设置domain...

    同源策略以及cookie安全策略

    HttpOnly属性可以防止JavaScript访问Cookie,从而减少Cookie被篡改或窃取的风险。然而,尽管Cookie安全策略比同源策略更为严格,但JavaScript依然可以通过某些方式绕过限制,如改变Cookie的Path属性。 【Flash安全...

    C#单点登陆组件源码SSO

    源码可能包含了处理不同域之间的票据传递的技术,例如使用隐藏的IFrame或者设置P3P头来实现跨域Cookie。 5. **会话管理**:在SSO环境中,会话管理需要特别注意,确保用户的会话状态在整个系统中得到同步。这可能...

Global site tag (gtag.js) - Google Analytics