PHP 5.5.9版本中COOKIE的奇怪现象

WBOY
풀어 주다: 2016-06-06 20:24:19
원래의
1273명이 탐색했습니다.

我在localhost下建了四个文件

<code>/1.php
/a/1.php
/test/1.php
/test/a/1.php</code>
로그인 후 복사
로그인 후 복사

文件中的代码都是一样的

<code><?php setcookie( __DIR__ ,__DIR__ );
var_dump($_COOKIE);</code></code>
로그인 후 복사
로그인 후 복사

我本以为,所有页面打开后,反复刷新,直到所有的cookie都设置完,结果应该是一样的。
但实际上不是

<code>/1.php            array(1) { ["/var/www/html"]=> string(13) "/var/www/html" } 


/a/1.php            array(2) { ["/var/www/html/a"]=> string(15) "/var/www/html/a" ["/var/www/html"]=> string(13) "/var/www/html" } 


/test/1.php       array(2) { ["/var/www/html/test"]=> string(18) "/var/www/html/test" ["/var/www/html"]=> string(13) "/var/www/html" } 


/test/a/1.php      array(3) { ["/var/www/html/test/a"]=> string(20) "/var/www/html/test/a" ["/var/www/html/test"]=> string(18) "/var/www/html/test" ["/var/www/html"]=> string(13) "/var/www/html" } </code>
로그인 후 복사
로그인 후 복사

明显看出 php的$__COOKIE 获取的cookie是文件所在层级到根目录,这个范围中设置的cookie。而更深层的文件设置的cookie和平级但不同目录的文件设置的cookie,是获取不到的。
我想问
假设 /test/1.php 文件要获取/test/a/1.php 文件设置的cookie,怎么做到呢?
这种现象出现的原理是什么呢?

回复内容:

我在localhost下建了四个文件

<code>/1.php
/a/1.php
/test/1.php
/test/a/1.php</code>
로그인 후 복사
로그인 후 복사

文件中的代码都是一样的

<code><?php setcookie( __DIR__ ,__DIR__ );
var_dump($_COOKIE);</code></code>
로그인 후 복사
로그인 후 복사

我本以为,所有页面打开后,反复刷新,直到所有的cookie都设置完,结果应该是一样的。
但实际上不是

<code>/1.php            array(1) { ["/var/www/html"]=> string(13) "/var/www/html" } 


/a/1.php            array(2) { ["/var/www/html/a"]=> string(15) "/var/www/html/a" ["/var/www/html"]=> string(13) "/var/www/html" } 


/test/1.php       array(2) { ["/var/www/html/test"]=> string(18) "/var/www/html/test" ["/var/www/html"]=> string(13) "/var/www/html" } 


/test/a/1.php      array(3) { ["/var/www/html/test/a"]=> string(20) "/var/www/html/test/a" ["/var/www/html/test"]=> string(18) "/var/www/html/test" ["/var/www/html"]=> string(13) "/var/www/html" } </code>
로그인 후 복사
로그인 후 복사

明显看出 php的$__COOKIE 获取的cookie是文件所在层级到根目录,这个范围中设置的cookie。而更深层的文件设置的cookie和平级但不同目录的文件设置的cookie,是获取不到的。
我想问
假设 /test/1.php 文件要获取/test/a/1.php 文件设置的cookie,怎么做到呢?
这种现象出现的原理是什么呢?

你去看下setcookie的文档。
setcookie的第三个参数path可以定义cookie生效的目录。 把path设置成/, 就说明cookie可以在域名下公用。

这种现象防止cookie变量冲突,也更安全。

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!