• 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');


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

  • 相关阅读:
    Android 多渠道打包,上百渠道,秒打签名
    Failed to collect certificates from /data/app/vmdl201020547.tmp/base.apk: META-INF/CERT.SF indicates /data/app/vmdl201020547.tmp/base.apk is signed using APK Signature Scheme v2, but no such signature
    React java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.edaixi.activity/lib-main/libgnustl_shared.so" is 32-bit instead of 64-bit
    Effective Java 电子书 apk版本下载
    javascript数组遍历的几种常用方法性能分析对比
    微信小程序开发——列表分页上拉加载封装实现(订单列表为例,订单状态改变后刷新列表滚动位置不变)
    微信小程序开发——点击防重的解决方案
    微信小程序开发——点击按钮退出小程序的实现
    css选择器的优先级
    html页面的CSS、DIV命名规则(仅供参考学习)
  • 原文地址:https://www.cnblogs.com/zaoa/p/9365431.html
Copyright © 2020-2023  润新知