php设置cookie路径总结 转

转自:https://blog.csdn.net/weixin_39668571/article/details/115138552

http://localhost/test/cookie/father.php

http://localhost/test/cookie/child/child.php

 代码如下 复制代码
//location:  locahost/test/cookie/father.php

setcookie("father_set_1_/","@@@@",time() 24*3600,"/");

setcookie("father_set_2_/child","@@@@",time() 24*3600,"/child/");

setcookie("father_set_3_test/cookie/child","@@@@",time() 24*3600,"/test/cookie/child/");

print_r($_COOKIE);

?>

 代码如下 复制代码
//location:   localhost/test/cookie/child/child.php

setcookie("child_set_0","@@@@",time() 24*3600);

setcookie("child_set_1_/","@@@@",time() 24*3600,"/");

setcookie("child_set_2_/child","@@@@",time() 24*3600,"/child");

setcookie("child_set_3_/test/cookie/child/","@@@@",time() 24*3600,"/test/cookie/child/");

print_r($_COOKIE);

?>

分别按如下顺序访问页面father.php—>child.php—>father.php—>child.php,使用firebug查看,分别有如下结果:

91feb764faef558b24e2ba702819f555.png

 

第一访问father.php

图中可以看出,本次请求服务端做出响应,打印了$_COOKIE数组,但数组为空。设置了三个cookie值,分别是:"father_set_1_/"、"father_set_2_/child"、"father_set_3_test/cookie/child",它们对应的路径为"/"、"/child"、"/test/cookie/child",其中"/"指的是站点根目录。

第一次请求father.php时,初始状态下客户端没有相关的cookie记录,在上图中只有已收到的cookie,没有已发送的cookie,则打印$_COOKIE数组时是没有输出。

从上面这点可以看出,页面的每次请求cookie的变化是:页面请求时浏览器发送客户端已有的cookie,服务器端接收cookie将其存入数组$_COOKIE数组中供程序使用;而在服务器端响应本次请求设置的cookie尚未发送到客户端时$_COOKIE数组中是没有记录的。

3920e27c94a4d5ee3c1a202793dbe4bd.png

第一次访问child.php

访问child.php能看到请求中发送了两个cookie分别为"father_set_1_/"、"father_set_3_test/cookie/child",接收到四个cookie分别是"child_set_0"、"child_set_1_/"、"child_set_2_/child"、"child_set_3_/test/cookie/child/"。

页面打印出的$_COOKIE数组中有两个值,分别是请求时发送的数据。

这里有个貌似奇怪的地方,打印出的$_COOKIE数组只有两个呢,第一个father.php页面不是设置了三个cookie值吗,为什么不能访问"father_set_2_/child"呢?

这里仔细分析就没有什么奇怪的了,浏览器每次发出请求只发送父级路径和当前路径下的cookie给服务器,服务端的$_COOKIE数组也就是来自每次请求中的发送cookie,这也意味着一个页面只能访问路径设置为当前页面路径和父路径的cookie,不能访问兄弟路径的cookie。

d18724df9e97225b3d2844651d3744f7.png

第二次访问father.php

第二次访问father.php打印出了二个值,也就是本次请求发送了两个值,也就是意味着father.php能访问两个值它们分别是"father_set_1_/"、"child_set_1_/"对应的路径都是"/"。

这里就能看出来father.php虽然设置了三个cookie,但由于路径的原因浏览器请求时并没有发送其他子路径的cookie以至于不能读取。其中"child_set_1_/"是子路径下的页面设置的cookie,由于路径是本页面所在路径则能读取。

还有一点值得注意的是,这次访问时没能打印出"child_set_0"的值,在child.php中"child_set_0"的路径是为空的,这点是默认为当前路径,而不是站点根目录的,所有子路径想设置cookie让父路径的页面访问则需要设置路径的。

0498fb4ee2931a9f8b62f66833617e7b.png

第二次访问child.php

再次访问child.php一共能打印出5个值,没能打印出路径为"/child"的cookie,这点说明浏览器只发送“直系”路径关系的cookie值

好了现在不知道你对cooke路径设置懂了没有其它就是我们要使用那个就设置那个路径了,如果是多域名就直接设置主域名就可以了,如果是目录指定目录就行了,如果是单文件指定单文件路径就可以了哦。

 

点赞

发表回复

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