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');
如有不全面的地方,欢迎大家指正。
PHP会话cookie类的封装的更多相关文章
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 会话—cookie
什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题? 每个用户在使 ...
- 会话Cookie及session的关系(Cookie & Session)
会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...
- Servlet--HttpSession接口,HttpSessionContext接口,Cookie类
HttpSession接口 定义 public interface HttpSession 这个接口被 Servlet 引擎用来实现在 HTTP 客户端和 HTTP 会话两者的关联.这种关联可能在多外 ...
- C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点
HttpUtil工具类: using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...
- Cookie类
Cookie类:用于存储会话数据 1)构造Cookie对象 Cookie(java.lang.String name, java.lang.String value) 2)设置cookie void ...
- iOS开发--QQ音乐练习,旋转动画的实现,音乐工具类的封装,定时器的使用技巧,SliderBar的事件处理
一.旋转动画的实现 二.音乐工具类的封装 -- 返回所有歌曲,返回当前播放歌曲,设置当前播放歌曲,返回下一首歌曲,返回上一首歌曲方法的实现 头文件 .m文件 #import "ChaosMu ...
- Java—类的封装、继承与多态
一.类和对象 1.类 类是数据以及对数据的一组操作的封装体. 类声明的格式: 类声明 { 成员变量的声明: 成员方法的声明及实现: } 1.1 声明类 [修饰符] class 类<泛型> ...
- 025医疗项目-模块二:药品目录的导入导出-HSSF导入类的封装
上一篇文章提过,HSSF的用户模式会导致读取海量数据时很慢,所以我们采用的是事件驱动模式.这个模式类似于xml的sax解析.需要实现一个接口,HSSFListener接口. 原理:根据excel底层存 ...
随机推荐
- 第二话:javascript中闭包的理解
闭包是什么? 通过闭包,子函数得以访问父函数的上下文环境,即使父函数已经结束执行. OK,我来简单叙述下,先上图. 都知道函数是javascript整个世界,对象是函数,方法是函数,并且js中实质性的 ...
- Ajax与Controller的参数交互
理论 jQuery.ajax( options )中重要参数设置 jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据.通过jquery.ajax与SpringMVC的C ...
- Part2_lesson1---arm家族大检阅
芯片(比如2440.6410.210等等)包含ARM核. 指令结构和ARM核有关系: ARM9对应指令架构版本ARMV4 ARM11对应指令架构版本ARMV6 cortex A8对应指令架构版本ARM ...
- 【#】Spring3 MVC (三)---请求处理方法 参数及返回值总结
博客分类: spring MVCJSPServletCC++ @RequestMapping("/xxxx") public String aaa(){ } 在处理用户请求的方 ...
- Qcreator3.1.2调试器(windows)版本
环境:visual studio 2012 qt:5.3.1 默认的ms版本qtcreator只能使用visual studio的编译器,不能使用调试工具.需要gdb或者cdb进行调试,这里介绍使用的 ...
- 解决gitosis中authorized_keys不自动更新问题
1.拷贝一个管理员权限用户的id_rsa.pub到服务器端 这里我拷贝的是yang电脑的key,命令如下: scp /home/yang/.ssh/id_rsa.pub serveradmin@服务 ...
- HDU 2159 FATE (二维背包)
题意:中文题. 析:dp[i][j] 已经杀了 i 个怪兽,已经用了 j 体积,所能获得的最大经验值,这个和一维的差不多,只是加一维而已. 代码如下: #pragma comment(linker, ...
- 深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及访问方式
内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的 ...
- 基于Qt5 跨平台应用开发
1.Qt简介 2.Qt 编程关键技术 2.1 信号与槽 2.2 Qt事件处理 3.Qt开发与实例分析 3.1 开发环境 3.2 系统实现基本框架 3.3 数据库管理 3.5 对Excel进行操作 4. ...
- getField
model.getField(field, num) field {String} 字段名,多个字段用逗号隔开 num {Boolean | Number} 需要的条数 return {Promise ...