获取
获取浏览器在请求时携带的cookie数据,使用超全局数组变量, $_COOKIE完成对cookie的获取。
其中每个 $_COOKIE 中的元素,对应一个cookie变量,元素的键就是cookie的key,元素的值就是cookie的value。
时间设置
通过cookie的第三个参数可以设置,有效期采用一个时间戳进行表示。
浏览器在向服务器发送请求时,会检测到cookie是否有效,只有没有过有效期的cookie的数据请求时,才会携带。
语法
特殊的有效期值:
- 0,默认的,表示会话周期
- Time()-1,删除cookie的标准做法,setCookie(‘KEY’, time()-1)
- PHP_INT_MAX:逻辑上表示永久有效的cookie,到2038年。
有效路径
cookie在当前目录及其后代目录有效。
Tip:路径,不是代码所在文件的路径,而是浏览器请求的路径。设置’/’可以保证站点所有路径有效。
有效域
Cookie仅在当前域下有效。
可以通过设置,使cookie的有效域扩展到某个一级域名下的所有子域。
第五个参数可以做到。
setCookie('domain_name', 'in_test_kang', 0, '', 'kang.com');
是否仅安全传输
https://加密的http协议。
httponly属性
打开httponly为true,则不可以被其他脚本访问cookie,比如js脚本。
测试如下:
<?php
setCookie('do_httponly', 'php34', 0, '', '', false, true);
setCookie('not_httponly', 'php34', 0, '', '', false, false);
?>
<?php
echo '<pre>';
var_dump($_COOKIE);
?>
<script type="text/javascript">
console.log(document.cookie);
alert(document.cookie);
</script>
在控制台上只能看到:
语法
cookie值,仅仅支持字符串类型。可以写成数组形式,但是它是两个cookie变量。只是我们自己使用时用数组方便而已。
$_COOKIE仅仅是存储浏览器请求时携带的cookie。当前脚本周期内,设置的cookie,还没有携带,所以不会有效。下次执行脚本时,则会携带cookie。
类似于header(),setCookie()前也不能存在任何的输出。这是HTTP协议规定导致的。