文档章节

php封装cookie类调用 ( 不足之处请指正 )

半缘修道半缘君丶
 半缘修道半缘君丶
发布于 2018/07/26 17:40
字数 443
阅读 40
收藏 0

<?php
/**
 * Cookie的设置、读取、更新、删除
 */
class CustomCookie{
    static private $_instance = null;
    private $expire= 0;
    private $path = '';
    private $domain = '';
    private $secure = false;
    private $httponly = false;

    /**
     * 构造函数完成Cookie参数初始化工作
     * @param array $options [Cookie相关选项]
     */
    private function __construct(array $options=[]){
        $this->setOptions($options);
    }
    /**
     * 设置相关选项
     * @param array $options [Cookie相关选项]
     */
    private function setOptions(array $options=[]){
        if(isset($option['expire'])){
            $this->expire = (int)$options['expire'];
        }
        if(isset($options['path'])){
            $this->path = $options['path'];
        }
        if(isset($options['domain'])){
            $this->domain = $options['domain'];
        }
        if(isset($options['secure'])){
            $this->secure = (bool)$options['secure'];
        }
        if(isset($options['httponly'])){
            $this->httponly = (bool)$options['httponly'];
        }
        return $this;
    }

    /**
     *单例模式
     * @param [array] $options [Cookie相关选项]
     * @param [object]          [对象实例]
     */
    public static function getInstance(array $options=[]){
        if(is_null(self::$_instance)){
            $class = __CLASS__;
            self::$_instance = new $class($options);
        }
        return self::$_instance;
    }
    /**
     * [设置Cookie]
     * @param string $name     Cookiede的名称
     * @param mixed  $value    Cookiede的值
     * @param array  $options  Cookie相关选项
     */
    public function set($name,$value,array $options=[]){
        if(is_array($options)&&count($options)>0){
            $this->setOptions($options);
        }
        if(is_array($value)||is_object($value)){
            $value = json_encode($value);
        }
        setcookie($name,$value,$this->expire,$this->path,$this->domain,$this->secure,$this->httponly);
    }

    /**
     * 得到指定的cookie
     * @param  string $name Cookie名称
     * @return mixed       返回null或者对象或者标量
     */
    public function get($name){
        if(isset($_COOKIE[$name])){
            substr($_COOKIE[$name],0,1)=='{'?json_decode($_COOKIE[$name]):$_COOKIE[$name];
        }else{
            return null;
        }
    }

    /**
     * 删除指定cookie
     * @param string $name Cookie名称
     * @param array $options 相关选项
     */
    public function delete(string $name,array $options=[]){
        if(is_array($options) && count($options) > 0){
            $this->setOptions($options);
        }
        if(isset($_COOKIE[$name])){
            setcookie($name,'',time()-1,$this->path,$this->domain,$this->secure,$this->httponly);
            unset($_COOKIE[$name]);
        }
    }

    /**
     * 删除所有cookie
     */
    public function deleteAll(array $options=[]){
        if(is_array($options) && count($options) > 0){
            $this->setOptions($options);
        }
        if(!empty($_COOKIE)){
            foreach($_COOKIE as $name=>$value){
                setcookie($name,'',time()-1,$this->path,$this->domain,$this->secure,$this->httponly);
                unset($_COOKIE[$name]);
            }
        }
    }
}

// $cookie = CustomCookie::getInstance();
// echo "<pre>";
// var_dump($cookie);die;
// echo "</pre>";
// $cookie->set('x','x');
// $cookie->set('xx','xx');
// $cookie->set('xxx',['csd'=>'cdsvds','csdcsd'=>'cdsgc']);
// $cookie->set('xxxx',['csd'=>'cdsvds','csdcsd'=>'cdsgc']);
// $cookie->delete("xx");
// $cookie->deleteAll();

© 著作权归作者所有

半缘修道半缘君丶
粉丝 0
博文 22
码字总数 7133
作品 0
扬州
后端工程师
私信 提问
SSO 单点登录总结(PHP)

本篇文章根据个人理解的知识整理汇总,如有不足之处,请大家多多指正。 单点登录(SSO——Single Sign On)的应用是很普遍的,尤其在大型网站系统中,比如百度,登录百度账号和,再转到百度经...

飞逸逸飞
2018/09/09
0
0
Spring Boot 学习系列(09)—自定义Bean的顺序加载

此文已由作者易国强授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 Bean 的顺序加载 有些场景中,我们希望编写的Bean能够按照指定的顺序进行加载。比如,有UserS...

网易云
2018/11/01
0
0
【原】PHP从入门到精通2小时【图文并茂】

原创内容,转载请注明。 主要内容: 搭建PHP开发环境 第一个helloworld程序 变量 全局变量 循环结构 函数 数组 面向对象编程 继承 接口 多态 日志 文件的读写 时间格式和时区 创建图形 从远程...

乌云上
2018/09/16
0
0
简单封装了一个excel工具,利用反射,根据传入的对象,返回Excel转换后对象的集合

根据工作需要,对jxl进行了简单的封装,目前只封装了少量方法,此版本核心功能: getObjectList(Object object); //根据传入对象,将excel转换为该对象的集合。 后续功能陆续增加,热心分享,...

RickyLi
2016/08/12
445
4
微信小程序--wx.request封装和使用

1、前言 微信小程序基础 熟悉开发的朋友可能对情有独钟。 的二次封装 的集中管理和使用 2、配置 一般情况下,项目中的域名前缀、登录的、等都是配置在中 3、封装 在小程序目录下建立文件夹,...

SilentLove
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
14
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.3K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部