<?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. 从零开始安装hue(原创-转载注明出处)

    hue安装需要从github上面下载源码,进行编译安装.github上面给出的安装教程很简单 然而实际上在安装的过程中遇到了无数个坑,下面开始真正意义上的从零开始安装hue. 安装环境: centOS ...

  2. libpcap编程实例

    #include <stdio.h> #include <stdlib.h> #include <pcap.h> #include <errno.h> ...

  3. spring 整合 mybatis (不含物理分页)

    http://www.mybatis.org/spring/mappers.html http://www.mybatis.org/spring/zh/mappers.html <?xml ve ...

  4. 编写高质量代码改善C#程序的157个建议——建议153:若抛出异常,则必须要注释

    建议153:若抛出异常,则必须要注释 有一种必须加注释的场景,即使异常.如果API抛出异常,则必须给出注释.调用者必须通过注释才能知道如何处理那些专有的异常.通常,即便良好的命名也不可能告诉我们方法会 ...

  5. Materialize——扁平化卡片式网页模板

    Materialize 官网:http://www.materialscss.com/ 下载 http://pan.baidu.com/s/1kUUX2Vt CSS 颜色 背景色 <div cl ...

  6. GCT感受

    GCT考试已经结束了,但是复习GCT的时候一直没来得及总结点什么,GCT考的比较基础,所以复习起来并不是特别费力,但是还是有一些东西值得我们去学习的. 对于GCT考试,一开始在报名的时候其实心里是挺抵 ...

  7. ViewResolver 视图解析器

    pringMVC 视图解析器 前言 在前一篇博客中讲了 SpringMVC 的Controller 控制器,在这篇博客中将接着介绍一下 SpringMVC 视图解析器.当我们对SpringMVC控制的 ...

  8. [安裝] Ubuntu Server 初试

    在 Delphi 10.2 Tokyo 版里将支持 Linux 系统,先做一下学习记录: 安装 Ubuntu Server: 安装方法请参考官方教学影片: https://community.emba ...

  9. Java == 和 equals 比较

    在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...

  10. What is the difference between inverse converse and reverse?

    http://wiki.answers.com/Q/What_is_the_difference_between_inverse_converse_and_reverse First, it help ...