php处理cookie生成、删除、获取、函数

作者:Liaodeity - 2015年08月04日

这是处理cookie的函数,包括设置、获取、删除cookie等操作。多参数设置,方便灵活使用。还函数来源ThinkPHP

函数

可对配置进行修改,符合自己的需求

/**
 * Cookie 设置、获取、删除
 * @param string $name cookie名称
 * @param mixed $value cookie值
 * @param mixed $option cookie参数
 * @return mixed
 */
function cookie($name='', $value='', $option=null) {
    ob_start();
    // 默认设置
    $config = array(
        'prefix'    => 'jianbaizhan_', // cookie 名称前缀
        'expire'    =>  0, // cookie 保存时间
        'path'      =>  '/', // cookie 保存路径
        'domain'    =>  '', // cookie 有效域名
        'httponly'  =>  '', // httponly设置
    );
    // 参数设置(会覆盖黙认设置)
    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));
    }
    if(!empty($config['httponly'])){
        ini_set("session.cookie_httponly", 1);
    }
    // 清除指定前缀的所有cookie
    if (is_null($name)) {
        if (empty($_COOKIE))
            return null;
        // 要删除的cookie前缀,不指定则删除config设置的指定前缀
        $prefix = empty($value) ? $config['prefix'] : $value;
        if (!empty($prefix)) {// 如果前缀为空字符串将不作处理直接返回
            foreach ($_COOKIE as $key => $val) {
                if (0 === stripos($key, $prefix)) {
                    setcookie($key, '', time() - 3600, $config['path'], $config['domain']);
                    unset($_COOKIE[$key]);
                }
            }
        }
        return null;
    }elseif('' === $name){
        // 获取全部的cookie
        return $_COOKIE;
    }
    $name = $config['prefix'] . str_replace('.', '_', $name);
    if ('' === $value) {
        if(isset($_COOKIE[$name])){
            $value =    $_COOKIE[$name];
            if(0===strpos($value,'jianbaizhan:')){
                $value  =   substr($value,6);
                return array_map('urldecode',json_decode(MAGIC_QUOTES_GPC?stripslashes($value):$value,true));
            }else{
                return $value;
            }
        }else{
            return null;
        }
    } else {
        if (is_null($value)) {
            setcookie($name, '', time() - 3600, $config['path'], $config['domain']);
            unset($_COOKIE[$name]); // 删除指定cookie
        } else {
            // 设置cookie
            if(is_array($value)){
                $value  = 'jianbaizhan:'.json_encode(array_map('urlencode',$value));
            }
            $expire = !empty($config['expire']) ? time() + intval($config['expire']) : 0;
            setcookie($name, $value, $expire, $config['path'], $config['domain']);
            $_COOKIE[$name] = $value;
        }
    }
    ob_end_flush();
    return null;
}

设置cookie

cookie('name','value');  //设置cookie
cookie('name','value',3600); // 指定cookie保存时间

更多参数1

cookie('name','value',array('expire'=>3600,'prefix'=>'jian_'))

更多参数2

cookie('name','value','expire=3600&prefix=jian_')

获取cookie

$value = cookie('name');

获取带前缀参数

echo cookie('name','','prefix=jian_');

删除cookie

cookie('name',null); //删除单一cookie
cookie(null); // 清空当前设定前缀的所有cookie值
cookie(null,'jian_'); //  清空指定前缀的所有cookie值


本文作者: Liaodeity

本文链接: https://www.jianbaizhan.com/article/265

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!


 请勿发布不友善或者负能量的内容。审查将对发布广告等违规信息进行处罚!
Jasmine 8年前

楼主大人写的这么好,还没人来抢楼