菜单

Cookie跨域操作

2010年11月22日 - php

正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
1.可在同一应用服务器内共享方法:设置cookie.setPath(“/”);
本机tomcat/webapp下面有两个应用:cas和webapp_b,
1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。
2)若在cas下面设置cookie的时候,增加一条cookie.setPath(“/”);或者cookie.setPath(“/webapp_b/”);就可以在webapp_b下面获取到cas设置的cookie了。
3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此 cookie.setPath(“/”);之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath(” /webapp_b/”);是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。
4)设置cookie.setPath(“/webapp_b/jsp”)或者cookie.setPath(“/webapp_b/jsp/”)的时 候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。
5)设置cookie.setPath(“/webapp_b”);,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了
6)有多条cookie.setPath(“XXX”);语句的时候,起作用的以最后一条为准。
6)设置多个path的方法???

2.跨域共享cookie的方法:设置P3P

转载如下:

今天在w3网站上看到了一篇介绍p3p的文章(http://www.w3.org/TR/P3P/),利用这个可以实现跨域访问cookie,我也试验一下。
其实很简单:试验用了2个域名test1.cn和test2.com

首先在test1.cn下放置一个文件setcookie.php 内容:

PHP代码
<?php
header(‘P3P: CP=”CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV”‘);//p3p
setcookie(“TestCookie”,”test”,time()+3600,”/”,”.test1.cn”);//设置cookie
?>
再放置一个readcookie.php 内容:

PHP代码
<?php
echo $_COOKIE[“TestCookie”];
?>
然后在test2.com下放置setcookie.php ,内容:

JavaScript代码
<script src=”http://www.test1.cn/setcookie.php”></script>
然后访问http://www.test2.com/setcookie.php 抓取数据包可以发现,在test1.cn域下生成了一个cookie ,名称是TestCookie,值是test

下面访问http://www.test1.cn/readcookie.php 来验证一下,可以发现,cookie确实设置成功了。

有兴趣可以去掉header(‘P3P: CP=”CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV”‘);这句,试一下就会发现cookie能设置,但是在test1.cn读不到这个cookie。

发表评论

电子邮件地址不会被公开。 必填项已用*标注