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‘);

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

原文地址:https://www.cnblogs.com/zaoa/p/9365431.html

时间: 2024-11-09 09:59:40

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

php中curl类常用方法封装和详解

curl对于PHP开发这来说是经常用到的一个类. 在抓取远程文件或是内容的时候就更常用了. 不过原生态的curl类比较复杂, 尤其对于新手来说,很多参数很容易让人头晕,现在好了. 这个类是封装了几个常用的curl函数. 可以实现抓取远程文件,模拟提交数据等功能. /* * 来源: http://www.xuehuwang.com/ * 作者: 雪狐博客 * 类用途: 实现抓取原创内容 */ class CURL { var $cookie_file; // 设置Cookie文件保存路径及文件名

Servlet 之会话cookie与session

简单地说,用户打开浏览器,发送多次请求并接受到来自服务器的响应,而后关闭浏览器,整个过程称之为一次会话.在多次请求中,为了共享数据,浏览器端采用cookie技术来保存与使用数据,而服务器端则是session技术(相对于一次会话的多次请求).cookie技术不局限java,其他语言也支持.例如:php.javascript等.Javaweb中提供了javax.servlet.http.Cookie类提供了相关操作,对于服务器端的程序而言,使用cookie相关的api,只需要关注几个点: 怎么创建c

Http会话cookie session

HTTP本身时无状态通信协议,要进行会话管理的基本原理,就是将需要维持的状态回应给浏览器,有浏览器在下次请求时主动发送状态信息, 让Web应用程序"得知"请求之间的关联. 隐藏字段是将状态信息以窗体中看不到的输入字段回应给浏览器,在下次发送窗体时一并发送这些隐藏的输入字段值.Cookie是保存在浏览器上的一个小文件, 可设定存活期限,在浏览器请求Web应用程序时,会一并将属于网站的Cookie发送给应用程序.URL重写是使用超链接,并在超链接的URL地址附加信息,以GET的方式 请求W

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

HttpSession接口 定义 public interface HttpSession 这个接口被 Servlet 引擎用来实现在 HTTP 客户端和 HTTP 会话两者的关联.这种关联可能在多外连接和请求中持续一段给定的时间.session 用来在无状态的 HTTP 协议下越过多个请求页面来维持状态和识别用户.一个 session 可以通过 cookie 或重写 URL 来维持. 方法 1.getCreationTime public long getCreationTime(); 返回建

会话—cookie

什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题? 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据.例如:用户点击超链接通过一个servlet购买了一个商品,程序应该想办法保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet可以得到用户购买的商品为用户结帐. 保存会话数据的两种技术: Cookie Coo

会话Cookie及session的关系(Cookie &amp; Session)

会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用session和客户端之间进行通信,以及jsessionId是怎么回事,这并没有一个完整和正确的认识,因此这里将这类信息汇总. session中的jsessionId是在session创建好之后,发送给客户端.然后在每一次请求中,客户端即会将这个信息传递给服务器端,服务器端使用这个信息来维护和客户端之间的会话通信,

C#自定义简化cookie类实例

本文实例讲述了C#自定义简化cookie类.分享给大家供大家参考.具体分析如下: 这个C#类封装了常用的cookie操作,包括读取cookie.写入cookie.设置cookie过期时间等等. using System; using System.Web; namespace DotNet.Utilities { public class CookieHelper { /// <summary> /// 清除指定Cookie /// </summary> /// <param

javascript 总结(常用工具类的封装,转)

javascript 总结(常用工具类的封装) 前言 因为工作中经常用到这些方法,所有便把这些方法进行了总结. JavaScript 1. type 类型判断 isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } isNumber (o) { //是否数字 return Object.prototype.toString.call(o).slice(8, -1) ==

类和封装的概念

类和封装的概念 什么是类? 电脑一般而言是由CPU,内存,主板,键盘和硬盘等部件组合而成. 思考:学习电脑组装需要多少时间?学习电脑组装是都需要学习显示器,键盘,鼠标,主板等部件的设计与制造? 类的封装 我们可以把程序按某种规则分成很多"块",类与类之间可能会有联系,每个类都有一个可变部分(public)和一个不可变部分(private).我们需要把可变部分和不可变部分分离出来,将不可变的部分暴露给其他类,而将可变的部分隐藏起来,以便于随时可以让它修改.这项工作就是封装. 类分为以下两