php设置cookie路径,php 设置cookie路径例子总结

先看phpcms中的一个函数

代码如下

phpcms/libs/classes/param.class.php

/**

* Set Cookie

* @param string $var

* @param string $value

* @param int $time

* @param string $path

*/

public static function set_cookie($var, $value = '', $time = 0, $path = '') {

$time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0);

$s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0;

$var = pc_base::load_config('system','cookie_pre').$var;

$path = $path == '' ? pc_base::load_config('system','cookie_path') : $path;

$_COOKIE[$var] = $value;

if (is_array($value)) {

foreach($value as $k=>$v) {

setcookie($var.'['.$k.']', sys_auth($v, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);

}

} else {

setcookie($var, sys_auth($value, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);

}

}

param::set_cookie('auth', '',time()-1,'/');

这个函数与cookie没什么区别我们先不介绍它,可能很多朋友懂,下面我们再看

setcookie函数的第四个参数为cookie路径,关于路径的设置,本文做了一些尝试,下面是两个测试页(直接用url表示路径和文件目录了):

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

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

代码如下

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);

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);

?>

代码如下

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);

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查看,分别有如下结果:

639161f7636ea287db44ab64b77e16bb.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数组中是没有记录的。

d39d5ad7c2199f4279cddde8870f8e14.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。

d1fe46bc62684f54e5f6414e1cf1e392.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让父路径的页面访问则需要设置路径的。

82a2b836080f7147f1943057533c53c6.png

第二次访问child.php

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值