PHP设置和删除cookie都是使用setcookie函数:
bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]] )
- $name:cookie名称
- $value:cookie值,默认值为“”
- $expire:cookie失效时间,默认值为0
- $path:cookie所在路径,默认值为当前路径
- $domain:cookie所在域名,默认值为“”
- $secure:是否只允许在https传输,默认值为FALSE
- $httponly:是否只允许http读取,默认值为FALSE
注意:setcookie()函数一定要在有输出之前执行。
设置Cookie
基本用法
<?php
$value = 'cookievalue';
setcookie("mycookie", $value);
?>
设置失效时间
cookie失效时间是一个Unix的时间戳,从1970年1月1日00:00:00 UTC开始算的秒数。一般情况下,$expire值会使用time()函数加上将要失效的秒数。
<?php
$value = 'cookievalue';
setcookie("mycookie", $value, time() + 3600);
?>
这里表示mycookie将会在一个小时后失效。
设置cookie路径
如果$path没有设定值,它默认为当前目录。设置cookie的访问目录,会限制cookie的访问范围,如设置$path值为:
- "/":表示整个域名下的url都是可以访问到设置的cookie
- "/test/":表示只有url为/test以及/test/的所有子孙目录都是可以访问到此cookie
示例:
<?php
$value = 'cookievalue';
setcookie("mycookie", $value, time() + 3600,"/");
?>
设置访问域名
有些人可能会奇怪为什么还要设置域名呢,莫非还可以设定为其他域名?
设置域名分两种情况:
- 空值:如果没有设置域名,默认为空值,cookie只能由当前设置cookie的域名访问
- 显示设置域名:如设置域名为"example.com",那么“www.example.com”,"demo.example.com"也是可以访问到此cookie,即允许在子域名共享cookie。
<?php
$value = 'cookievalue';
setcookie("mycookie", $value, time() + 3600,"/","example.com");
?>
设置$secure和$httponly
这两个参数用于控制http访问域名的方式:
- $secure为true时,只允许cookie在https上传输
- $httponly为true时,只允许http(s)访问,不允许其他脚本读取,如javascript。
设置cookie建议
- 建议设置cookie显式设置cookie的访问路径
- 出于安全考虑,把httponly设置为true。如果使用的是https,把secure设置为true
删除Cookie
设置完cookie后,可以使用$COOKIE变量来获取已设置的cookie。
<?php
// 输出某个cookie
echo $_COOKIE["mycookie"];
// 查看所有的cookie
print_r($_COOKIE);
?>
删除cookie,也是使用setcookie()函数,只需要把cookie的失效时间设置为当前时间之前即可。一般可以使用time()减去一定的秒数
<?php
setcookie("mycookie", "", time() - 3600);
?>
如果设置cookie时设置了其他参数,那么需要在有访问到cookie的url上删除cookie
<?php
setcookie("mycookie", "", time() - 3600, "/demo/", "example.com", 1);
?>
很多出现删不了cookie的原因,可能就是cookie设定了其他参数,如$path。
循环删除cookies
$past = time() - 3600;
foreach ( $_COOKIE as $key => $value )
{
setcookie( $key, $value, $past, '/' );
}