作者:老王
网上看了别人介绍的一片文章,说使用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/
分享到:
相关推荐
在JavaScript中,可以通过设置XMLHttpRequest对象的请求头来应用P3P策略。例如: ```javascript xmlhttp.setRequestHeader("P3P", 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE ...
2. **CORS(Cross-Origin Resource Sharing)**:CORS是一种现代的跨域访问控制机制,允许服务器通过设置特定的HTTP响应头来指定哪些源可以访问其资源。虽然主要用于API接口,但也可以应用于`iframe`。不过,CORS并...
例如,在IE浏览器中,若要在跨域情况下设置cookie,可以通过在服务器端的响应头中添加P3P策略声明,这样浏览器就能根据P3P声明的隐私政策来决定是否允许跨域cookie访问。 根据提供的文档内容,实现跨域cookie设置的...
总结来说,解决Iframe跨域访问Cookie和Session的关键在于理解和利用浏览器的特性,如P3P协议,以及巧妙地调整代码结构。同时,对于Session的管理,要意识到它与Cookie之间的关联性。在多系统集成的场景下,这些技巧...
有别于JS跨域、IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域。P3P是什么P3P(Platform for Privacy Preferences)是W3C公布的一项隐私保护推荐标准,以为用户提供隐私保护。 P3P标准的构想是:Web 站点的...
P3P 认证可以通过在服务器端设置 HTTP 头来实现,例如在 Java 中,可以使用以下代码来实现 P3P 认证: response.setHeader("P3P","CP=CAO PSA OUR"); 知识点四:跨域信息采集的定义和原因 跨域信息采集是指使用 ...
解决方法是: 代码如下: //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是浏览器提供的机制,用于控制不同源之间的资源访问。在...
通过这种方式,可以解决在IE浏览器中由于P3P隐私设置导致的iframe跨域cookie丢失问题,进而解决session失效导致的用户频繁重新登录的问题。这个方法在技术上是可行的,但需要网站管理员操作,确保P3P声明符合实际的...
P3P允许跨域设置cookie,通过在响应头中添加特定的P3P政策,浏览器会允许设置cookie。在PHP中,可以添加以下代码来设置P3P头: ```php header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE...
- **P3P协议**:对于不同顶级域名,浏览器默认不允许跨域设置Cookie。但通过添加P3P头(Privacy Policy Platform),如`header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE...
- **P3P头设置**:对于IE浏览器,需要正确设置P3P头以允许cookie跨域传输。P3P (Platform for Privacy Preferences) 是一种隐私保护标准,通过设置`CP=CAO PSA OUR`这样的P3P策略,可以告知浏览器该网站遵守特定的...
- **HTTP头部传递SessionID**:对于不支持Cookie的环境,可以通过HTTP头部`P3P`或`Set-Cookie2`来传递SessionID。 3. **ASP.NET中的实现** 在ASP.NET中,我们可以自定义SessionStateStoreProvider来扩展默认的...
在 ASP.NET 开发中,跨域和 Session 失效问题是一个常见的问题,但通过添加“P3P”协议和使用 HttpContext.Current.Session,我们可以解决这个问题,从而确保应用程序的正常运行。 相关知识点: * 跨域和 Session ...
我们知道cookie是可以跨二级域名来访问,这个很好理解,例如你 www.test1.com 在的web应用程序创建了一个cookie,要想在bbs.test1.com这样的二级域名对应的应用程序中访问,就必须你在创建cookie的时候设置domain...
HttpOnly属性可以防止JavaScript访问Cookie,从而减少Cookie被篡改或窃取的风险。然而,尽管Cookie安全策略比同源策略更为严格,但JavaScript依然可以通过某些方式绕过限制,如改变Cookie的Path属性。 【Flash安全...
源码可能包含了处理不同域之间的票据传递的技术,例如使用隐藏的IFrame或者设置P3P头来实现跨域Cookie。 5. **会话管理**:在SSO环境中,会话管理需要特别注意,确保用户的会话状态在整个系统中得到同步。这可能...