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底层存 ...
随机推荐
- robotframework中文显示乱码
问题描述:接口.数据库返回信息有中文的时候会显示unicode的样式,如图 解决方法: 1.robotframework为3.0.X 2.找到Python安装目录下的\Lib\site-package ...
- List 组件简单示例及其onItemsDisclosure点击事件
来自<sencha touch权威指南>第9章,276页开始 ------------------------------------------------- app.js代码如下: E ...
- spring.net 继承
. <object id="parent" type="Bll.Parent, HRABLL" > <property name=" ...
- 开源项目spring-shiro-training思维导图
写在前面 终于完成了一个开源项目的思维导图解读.选spring-shiro-training这个项目解读是因为它开源,然后涉及到了很多我们常用的技术,如缓存,权限,任务调度,ssm框架,Druid监控 ...
- wins 软件安装
1.x86 x64区别86就是原来的32位操作系统64就是现在比较新的64位操作系统
- IO编程之writelines方法
1.使用with open as 函数写入文件 2.创建后的文件名为database.txt 3.创建一个函数进行读取文件,使用for循环遍历整个文件内容 4.使用if __name__=='__ma ...
- HDU 5119 Happy Matt Friends(DP || 高斯消元)
题目链接 题意 : 给你n个数,让你从中挑K个数(K<=n)使得这k个数异或的和小于m,问你有多少种异或方式满足这个条件. 思路 : 正解据说是高斯消元.这里用DP做的,类似于背包,枚举的是异或 ...
- ArcGIS API for Javascript 图层切换渐变效果实现
在一个WebGIS系统中往往要实现图形的切换,比如业务图层的切换,以及底图的切换等等,可以通过控制图层的可见性来实现.比如通过设置图层的opacity .visible来控制,前几天有网友聊天的时候提 ...
- Linux 下几个重要目录解释
linux下把所有的东西都当作文件的,,一个分区想要使用就需要挂载到一个文件夹上,那这个文件夹就叫挂载点,像常用的把 设备/dev/cdrom挂载到/mnt,,,你想问的应该是linux的各目录的解释 ...
- NIOS II SOPC系统自定义IP常见知识点总结
封装IP1.将写好的Verilog代码添加在Quartus工程中,IP目录下,(如果没有,自己建一个)2.打开Qsys工具,选择New Component3.name和Display name输入合理 ...