setcookie();中的第五个参数是域名参数domain
这个参数如果是.domain.com那么这个cookie可以在主域名或者任意子域名都能够获取。相同域名下。子域名间可以相互共享。但是不相同的域名下不能直接共享。
不同(主)域名直接可以通过嵌套的方式生成cookie,通过A域名下的页面嵌套B域名下的连接,从而生成B域名的cookie。但是不能直接相互共享。
嵌套的方式在ie下可能会被阻止,不同的浏览器对第三方生成cookie是有着不同的权限的。因此用到p3p开启ie的权限允许第三方生成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"‘);//p3p
sso单点登录
A登录之后,产生一个标示,带着这个标示去访问B(判断是否登录成功),再获取数据。
只要sessionid知道 就可以去找链接池找到登录状态
子域名下setcooke.php
<?php //假如登录成功了 //在子域名下生成一个共享cookie $gongxiang = "zhuliuyang"; setcookie("gongxiang",$gongxiang,time()+3600,"/",".cs.com");//设置共享的cookie session_id($gongxiang);//设置session_id session_start();//开启 session $_SESSION[‘isLogin‘] = ‘1‘; echo "set success";
主域名下判断是否登录
<?php if(isset($_COOKIE[‘gongxiang‘]) && $_COOKIE[‘gongxiang‘]!=false) { session_id($_COOKIE[‘gongxiang‘]);//获取共享cookie并设置session_id } session_start();//开启session echo "<pre>"; var_dump($_COOKIE); var_dump($_SESSION); echo "</pre>"; ?>
运行结果:
清除cookie之后。是两个空数组。
不同主域名下原理也是一样的。前提是在同一服务器上。不在同一服务器上,那么session的连接池就找不到了。
在不同的服务器上可以吧登录状态存到数据库中或者文件中。再进行判断
(未完待续)
时间: 2024-10-08 21:29:18