zoukankan      html  css  js  c++  java
  • PHP会话cookie类的封装

    <?php
    header('content-type:text/html;charset=utf-8');
    /**
     * 完成cookie的设置、删除、更新、读取
     */
    class Cookie{
        private static $instance=null;
        private  $expire=0;//过期时间 单位为s 默认是会话 关闭浏览器就不在存在
        private $path='';//路径 默认在本目录及子目录下有效 /表示根目录下有效
        private $domain='';//域
        private $secure=false;//是否只在https协议下设置默认不是
        private $httponly=false;//如果为TRUE,则只能通过HTTP协议访问cookie。 这意味着脚本语言(例如JavaScript)无法访问cookie
        /**
         * [__construct description]
         * 构造函数完成cookie参数初始化工作
         * @DateTime 2018-07-25T09:50:51+0800
         * @param    array                    $options [cookie相关选项]
         */
        private function __construct(array $options=[]){
            $this->getOptions($options);        
        }
        private function getOptions(array $options=[]){
            if(isset($options['expire'])) {$this->expire=$options['expire'];}    
            if(isset($options['path'])) $this->path=$options['path'];
            if(isset($options['domain'])) $this->domain=$options['domain'];
            if(isset($options['secure'])) $this->secure=$options['secure'];
            if(isset($options['httponly'])) $this->httponly=$options['httponly'];    
            return $this;
        }
        /**
         * [getInstance description]
         * 单例模式
         * @DateTime 2018-07-25T09:50:01+0800
         * @param    array                    $options [cookie相关选项]
         * @return   object                    $options [对象实例]
         */
        public static function getInstance(array $options=[]){
            if(is_null(self::$instance)){
                $class=__CLASS__;
                self::$instance=new $class($options);
            }
            return self::$instance;
        }
        /**
         * 设置cookie
         * Func description
         * @DateTime 2018-07-25T09:42:37+0800
         * @param    [string]                 $name    [cookie名称]
         * @param    [mixed]                   $vlaue   [cookie值]
         * @param    array                    $options [cookie相关选项]
         */
        public function set($name,$value,array $options=[]){
            if(is_array($options)&&count($options)>0){
                $this->getOptions($options);
            }
            if(is_array($value)||is_object($value)){
                $value=json_encode($value);
                var_dump($value);
                
            }
             setcookie($name,$value,$this->expire,$this->path,$this->domain,$this->secure,$this->httponly);
        }
        /**
         * [get description]
         * 读取cookie值
         * @DateTime 2018-07-25T11:34:04+0800
         * @param    [string]                   $name [cookie名称]
         * @return   [mixed]                         [数组形式的值或者单个的值]
         */
        public function get($name){
            $value=$_COOKIE[$name];
            if(is_array($value)){
                $arr=[];
                foreach ($value as $k => $v) {
                    # code...
                    $arr[$k]=substr($v, 0,1)=='{'? json_decode($value):$v;
                }
                return $arr;
            }else{
            return substr($value, 0,1)=='{'? json_decode($value):$value;}
        }
        /**
         * [delete description]
         * 删除相应的cookie
         * @DateTime 2018-07-25T11:53:24+0800
         * @param    [string]                   $name    [cookie名称 可以是数组]
         * @param    array                    $options [cookie相关参数]
         * @return   [type]                            [description]
         */
        public function delete($name,array $options=[]){
            if(is_array($options)&&count($options)>0){
                $this->getOptions($options);
            }
            $value=$_COOKIE[$name];        
            if($value){
                if(is_array($value)){
        
                    foreach ($value as $k => $v) {
                        # code...
                         setcookie($name.'['.$k.']','',time()-1,$this->path,$this->domain,$this->secure,$this->httponly);
                        unset($v);
                    }                
                }else{
                setcookie($name,'',time()-1,$this->path,$this->domain,$this->secure,$this->httponly);
                unset($value);
            }
            }
        }

    }
    $cookie=Cookie::getInstance();
    //$cookie->set('aaaa','bb');
    //$cookie->set('bb','bb',['expire'=>time()+3600,'path'=>'/','domain'=>'localhost','secure'=>false,'httponly'=>true]);
    //$cookie->set('admin',['name'=>'张三','age'=>20]);
    //$cookie->set('user[name]','李四');
    //$cookie->set('user[age]',25);
    //var_dump($_COOKIE['user']);
    $cookie->delete('user');


    如有不全面的地方,欢迎大家指正。

  • 相关阅读:
    学习八数码拓展
    jzoj4762. 千帆渡
    jzoj5354. 导弹拦截
    学习上下界网络流小记
    jzoj2702. 探险&jzoj3917. 【NOIP2014模拟11.2A组】福慧双修
    jzoj100048. 紧急撤离
    jzoj100045. 好数
    jzoj3327. 陶陶的难题
    2368. 黑白棋
    学习类欧几里得小记
  • 原文地址:https://www.cnblogs.com/zaoa/p/9365431.html
Copyright © 2011-2022 走看看