有的时候我们会有很多二级域名的项目,但是为了统一登录入口,往往把用户信息加密后放入cookie,比如cookie的name是user_info,然后当我们访问其他二级域名项目的时候,先判断用户是否登录过,即只需要获取到user_info 即可,如果没有,则让用户跳转到统一登录入口完成登录,如果获取到了,则进行解密后的下一步操作,那么怎么去共享这个user_info呢,有以下几种方式:总结一下顶级域名和子级域名之间的cookie共享和相互修改、删除 - yangbai - SegmentFault 思否
/**
* Created by PhpStorm.
* User: guofu
* Date: 18-7-6
* Time: 上午10:00
*/
//setcookie("name",'little blue',time()+3600*12,'/','*.t1.com');
$s="itis a name";
echo $s;
setcookie("jb51",$s,time()+3600*12,'/','.t1.com');
setcookie("name","xiao ming",time()+3600*12,'/','t1.com');
则当我们去访问其他二级域名的时候就可以访问到共享的cookie
以下详细讲解
最近项目中刚好涉及到了主域名和子域名之间的共享和相互修改、删除,也就借此机会总结一下常用的几个场景,这里代码以PHP为例来说明,域名的话就拿顶级域名和二级域名为例,其他的场景都是类似哈!
设置COOKIE
顶级域名
顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名等等,否则cookie无法生成。
如yangbai.com能设置domain为yangbai.com或者www.yangbai.com,但不能设置domain为login.yangbai.com,这样cookie不会生成。
以下面的代码为例:
setcookie("name1","yangbai",time() +1000);//yangbai.com自己可以看到setcookie("name2","yangbai",time() +1000,"/","www.yangbai.com");//*.www.yangbai.com都可以看到setcookie("name3","yangbai",time() +1000,"/","yangbai.com");//*.yangbai.com都可以看到setcookie("name4","yangbai",time() +1000,"/","login.youzan.com");//设置无效
设置domain的时候,.yangbai.com和yangbai.com是一样的。
未指定domain时,默认的domain为用哪个域名访问就是哪个。
执行后,www.yangbai.com在浏览器的cookie情况如下图:
二级域名login.yangbai.com和game.yangbai.com浏览器的cookie情况如下图:
总的来说,顶级域名设置的cookie可以共享【需要指定domain主域名的host】给二级域名,也可以自己私有【不指定domain】。
二级域名
拿game.yangbai.com为例,代码如下:
setcookie("game","yangbai");//只有自己可以看到setcookie("game1","yangbai", time() +1000,"/","yangbai.com");//*.yangbai.com都可以看到setcookie("game2","yangbai", time() +1000,"/","chip.game.yangbai.com");//设置无效
执行后,game.yangbai.com在浏览器的cookie情况如下图:
总的来说,设置cookie的话只能在本域名下或者domain级别高于自身的域名下才会生效!
读取COOKIE
有了上面的例子和实践,大概的规则如下:
二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。例如:要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。
顶级域名只能获取到domain设置为顶级域名的cookie,domain设置为其他子级域名的无法获取。
修改COOKIE
顶级域名
顶级域名的cookie在顶级域名或者非顶级域名【需要设置domain为顶级域名才可以】都可以修改。代码如下:
#为所有二级域名设置一个cookiesetcookie("name","yangbai",time() +1000,"/","yangbai.com");#在game.yangbai.com下面修改这个cookie值setcookie("name","yangbai11",time() +1000,"/","yangbai.com");
二级域名
修改二级域名自身生成的cookie不需要设置domain,直接设置即可。代码如下:
#修改game.yangbai.com下面自身的cookie值setcookie("game","chip",time() +10000);
删除COOKIE
删除cookie理解为是修改cookie的一种特殊场景,只需将expire设置为过期、值设置为null即可,代码如下:
#删除yangbai.com下面的cookie值setcookie("name",null,time() -1000,"/","yangbai.com");#删除game.yangbai.com下面自身的cookie值setcookie("game",null,time() -1000);
最后,希望这些简单地总结可以帮到你,大家加油!