上篇文章中说:cookie必须在同一网站
下且cookie的path路径为当前url或者是当前url的父级
时才是共享的。
具体怎么理解呢?看下面解释
首页介绍下php中设置cookie的函数setcookie()
setcookie(name,value,expire,path,domain,secure)
image
需要注意的且常用的有俩点
- expire:可选。规定 cookie 的过期时间。time()+3600 将设置 cookie 的过期时间为1小时。如果这个参数没有设置,那么 cookie 将在
session
结束后(即浏览器关闭时)自动失效。和我们上篇文章中说的一样:如果不设置过期时间的话,客户端中expire显示的是session。 - path:可选。规定 cookie 的服务器路径。如果路径设置为 "/",那么该cookie 将在整个域名内有效。如果路径设置为 "/test/",那么 该cookie 将在 test 目录下及其所有子目录下有效,也就是/test和/test/aa目录下有效,也就是子目录能获取到父级目录的cookie,父级目录的cookie在子目录下共享。。
默认的路径值是 cookie 所处的当前目录,但我测试默认的路径值是 cookie 所处目录的上级目录
。
做几个测试就知道了,主要测试以下几点
- cookie不设置路径,默认path是当前目录还是当前目录的上级目录?
- 如果某cookie路径设置为 "api/test",那么在该目录下能够获取到在 /api/test ,/api和/目录内的cookie,这3目录下该cookie可以共享
- 写一个api,路由为 /api。
设置一个cookie变量a,以我们上面的预测,客户端的path应为 /
public function test(){
setcookie('a',111);
echo 1;
}
- 浏览器访问该api
看到path为 /,也就是说在整个域名内任何path的cookie都应该能访问该cookie变量a
- 在写一个api,路由为 /api/test/cookie
设置一个cookie变量b,以我们上面的预测,该cookie变量b的path应为/api/test,而且应该包含path为/api/test,/api和/的cookie变量,也就是包含我们上面设置的cookie变量a
public function cookie(){
setcookie('b',222);
echo 2;
}
- 访问该api
发现path确实/api/test,证明我么的第一个观点,而发现能共享cookie变量a,也证明了我们的第二个观点。
image
-
那么反向验证下,此时第一个api还是只能访问cookie变量a,而不能访问cookie变量b。发现证明是正确的
image
网友评论