正文
/**
* Cookie 设置、获取、删除
* @param string $name cookie名称
* @param mixed $value cookie值
* @param mixed $option cookie参数
* @return mixed
*/
系统内置了一个cookie函数用于支持和简化Cookie的相关操作,该函数可以完成Cookie的设置、获取、删除操作。
Cookie设置cookie('author','津沙港湾','3600');
执行代码段
结果为
array(size=4) 'pgv_pvi'=>string'3174355968'(length=10) 'PHPSESSID'=>string'u1v6kbhgfn583pl7ku8qs0vk53'(length=26) 'name'=>string'value'(length=5) 'author'=>string'津沙港湾'(length=12)还可以支持参数传入的方式完成复杂的cookie赋值,下面是对cookie的值设置3600秒有效期,并且加上cookie前缀think_
cookie('author','津沙港湾',array('expire'=>3600,'prefix'=>'think_'));
执行代码段
(解析$option数组)$option=array('expire'=>3600,'prefix'=>'think_')
$config=array_merge($config,array_change_key_case($option));结果为
array(size=6) 'prefix'=>string'think_'(length=6) 'expire'=>int3600 'path'=>string'http://www.yjs001.cn/'(length=1) 'domain'=>string''(length=0) 'secure'=>booleanfalse 'httponly'=>string''(length=0)($name前加一个前缀think_)
$name=$config['prefix'].str_replace('.','_',$name);结果为
'think_author'=>string'津沙港湾'数组参数可以采用query形式参数
cookie('author','津沙港湾','expire=3600&prefix=think_');
执行代码段
(解析$option字符串)$option='expire=3600&prefix=think_'
parse_str($option,$option);//parse_str—将字符串解析成多个变量结果为($option变成数组)
$option数组输出值 array(size=2) 'expire'=>string'3600'(length=4) 'prefix'=>string'think_'(length=6)$option 参数 分别为整型、字符串、数组 代码段
if(!is_null($option)){ //整型转成数组 if(is_numeric($option)){ $option=array('expire'=>$option); //字符串转成数组 }elseif(is_string($option)){ parse_str($option,$option); } //数组合并 $config=array_merge($config,array_change_key_case($option)); }支持给cookie设置数组值(采用JSON编码格式保存)
cookie('author',array('津沙港湾','崎沙小香港'));
执行代码段
if(is_array($value)){ $value='think:'.json_encode(array_map('urlencode',$value)); }结果为
'author'=>string' think: ["%E6%B4%A5%E6%B2%99%E6%B8%AF%E6%B9%BE","%E5%B4%8E%E6%B2%99%E5%B0%8F%E9%A6%99%E6%B8%AF"]'注意格式手动调整一下方便阅读json编码格式。
$value=cookie('author');
执行代码段
结果为
author对应的值 array(size=2) 0=>string'津沙港湾'(length=12) 1=>string'崎沙小香港'(length=15)详细分析$value=cookie('author');解码过程
array_map('urldecode',json_decode(MAGIC_QUOTES_GPC?stripslashes($value):$value,true));第一步
stripslashes()函数处理
返回一个去除转义反斜线后的字符串,
第二步
json_decode()函数处理,
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量,
json_decode()中设置true时,按数组格式返回变量,
第三步
array_map()函数处理,
json_decode()函数返回的数组传递给urldecode回调函数进行解码。
最后返回数组。
如果要获取所有的cookie,可以使用:
$value=cookie();
执行代码段
if(is_null($name)){ //这部分代码省略 }elseif(''===$name){//$name为空字符串才行===恒等于判断值和类型都要相等 //获取全部的cookie return$_COOKIE; }删除某个cookie的值,使用:
$value=cookie('author',null);
执行代码段
if(is_null($value)){ setcookie($name,'',time()-3600,$config['path'],$config['domain'], $config['secure'],$config['httponly']); unset($_COOKIE[$name]);//删除指定cookie要删除所有的Cookie值,可以使用:
$value=cookie(null);//清空当前设定前缀的所有cookie值
cookie(null,'think_'); // 清空指定前缀的所有cookie值
执行代码段
if(is_null($name)){ if(empty($_COOKIE)) returnnull; //要删除的cookie前缀,不指定则删除config设置的指定前缀 $prefix=empty($value)?$config['prefix']:$value; if(!empty($prefix)){//如果前缀为空字符串将不作处理直接返回 foreach($_COOKIEas$key=>$val){ if(0===stripos($key,$prefix)){ setcookie($key,'',time()-3600,$config['path'], $config['domain'],$config['secure'],$config['httponly']); unset($_COOKIE[$key]); } } } returnnull; }代码逻辑判断