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

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

PHP会话cookie类的封装的更多相关文章

  1. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  2. 会话—cookie

    什么是会话?       会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题?       每个用户在使 ...

  3. 会话Cookie及session的关系(Cookie & Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  4. Servlet--HttpSession接口,HttpSessionContext接口,Cookie类

    HttpSession接口 定义 public interface HttpSession 这个接口被 Servlet 引擎用来实现在 HTTP 客户端和 HTTP 会话两者的关联.这种关联可能在多外 ...

  5. C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点

    HttpUtil工具类: using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...

  6. Cookie类

    Cookie类:用于存储会话数据 1)构造Cookie对象 Cookie(java.lang.String name, java.lang.String value) 2)设置cookie void ...

  7. iOS开发--QQ音乐练习,旋转动画的实现,音乐工具类的封装,定时器的使用技巧,SliderBar的事件处理

    一.旋转动画的实现 二.音乐工具类的封装 -- 返回所有歌曲,返回当前播放歌曲,设置当前播放歌曲,返回下一首歌曲,返回上一首歌曲方法的实现 头文件 .m文件 #import "ChaosMu ...

  8. Java—类的封装、继承与多态

    一.类和对象 1.类 类是数据以及对数据的一组操作的封装体. 类声明的格式: 类声明 { 成员变量的声明: 成员方法的声明及实现: } 1.1 声明类 [修饰符] class 类<泛型> ...

  9. 025医疗项目-模块二:药品目录的导入导出-HSSF导入类的封装

    上一篇文章提过,HSSF的用户模式会导致读取海量数据时很慢,所以我们采用的是事件驱动模式.这个模式类似于xml的sax解析.需要实现一个接口,HSSFListener接口. 原理:根据excel底层存 ...

随机推荐

  1. Thread.sleep原理

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 假设现在是 2008-4-7 12:00:00.000,如果我调用 ...

  2. 1710 生日蛋糕(1999 noi)

    1710 生日蛋糕(1999 noi) 1999年NOI全国竞赛 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体 ...

  3. 根据dateutil计算从前到现在过去多少时间

    import datetime from dateutil import relativedelta while 1: birthday = input(">>>" ...

  4. C++中的深拷贝和浅拷贝 QT中的深拷贝,浅拷贝和隐式共享

    下面是C++中定义的深,浅拷贝 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会 ...

  5. linux 创建数据库

    mysql -uroot -pxxxxxx 1. 修改服务器的字符集 打开/etc/mysql/my.cnf,在[mysqld]后添加character-set-server=utf8 2. 查看my ...

  6. Demo—cookie电商购物车

    说明:cookie的操作须有域名,简单点说就是需要用发布的方式去访问,查看cookie信息请用开发者模式进入application栏 1.页面布局(结构)(根目录) 商品列表 <!doctype ...

  7. Word文档如何发CSDN博客

    目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...

  8. eclipse使用配置

    eclipse设置工作空间为UTF-8(适应中文,避免乱码) windows---preference---general---workspace,修改textfile encoding eclips ...

  9. 一、Numpy基础--数组

    (一)Numpy数组对象 Numpy中的nadrray是一个多维数组对象,该对象由两部分组成: 实际的数据 描述这些数据的元数据 大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据. 数组的数 ...

  10. Tomcat安装JPress

    上线代码有两种方式,第一种方式是直接将程序目录放在webapps目录下面,这种方式大家已经明白了,就不多说了.第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面.下面让我们 ...