PHP setcookie到别外一个域名去 -- 以及域名作用域

jackxiang 2009-12-8 10:07 | |
跨域名设置cookie需要用到两个文件 分别在两个域名下
比如你现在有两个域名 www.a.com  www.b.com
你现在想在b下设置cookie并通过在b下面设置a的cookie
你需要b下面的文件b.php
setcookie("test", ‘value’, time()+3600, "/", ".b.com");//建立b的cookie

<script src="http://www.a.com/seta.php?id=value"></script>//[/url]传递到a中

同时在a下面建立接收文件a.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中设置cookie

为你能睡个好觉,呵呵!

以前真没在意cookie的作用域问题,可能以前用.com域名没出过问题,今天用公司的一个cn域名测试,怎么也不能实现cookie共享,后来采用 js设置cookie,在另外一台服务器上共享cookie成功,真叫气人!翻阅了一下php的cookie 规范 ,里面有这么一段

Only hosts within the specified domain can set a cookie for a domain and domains must have at least two (2) or three (3) periods in them to prevent domains of the form: ".com", ".edu", and "va.us". Any domain that fails within one of the seven special top level domains listed below only require two periods. Any other domain requires at least three. The seven special top level domains are: "COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT".

看出来了吧,真他娘的草蛋!除了"COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT"这几个后缀的域名可以设置二级作用域,其他的域名至少三级才可以,也就是说想通过设置作用域为b.cn来实现a.b.cn和c.b.cn下的 cookie共享用php是不行的,php只能实现作用域b.a.cn下的d.b.a.cn和e.b.a.cn间的cookie共享,希望大家注意,再遇到此类问题,别浪费时间拼命的测试了……
延伸阅读:http://www.ibiancheng.cn/Article/VBNetArticle/200711/67.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2313/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2009-12-8 10:19
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]