COOKIE操作类的封装

2 篇文章 0 订阅

慕课学习-->PHP中的会话控制-->第二章 COOKIE的使用-->3-5Cookie操作类的封装

<?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($options['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=$options['secure'];
		}
		if(isset($options['httponly'])){
			$this->httponly=$options['httponly'];
		}
	}
	/**
	 *单例模式
	 *@param array $options Cookie相关选项
	 *@return 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 cookie的名称
	 *@param mixed $value cookie的值
	 *@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,JSON_FORCE_OBJECT);
		}
		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])){
			return substr($_COOKIE[$name],0,1)=='{'?json_decode($_COOKIE[$name]):$_COOKIE[$name];
		}else{
			return null;
		}
	}
	/**
	 *删除指定Cookie
	 *@param string $name cookie的名称
	 *@param array $options Cookie相关选项
	 */
	public function delete($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
	 *@param array $options Cookie相关选项
	 */
	public function deleteAll(array $options=[]){
		if(is_array($options)&&count($options)>0){
			$this->setOptions($options);
		}
		if(!empty($_COOKIE)){
			echo "empty";
			foreach ($_COOKIE as $name => $value) {
				setcookie($name,'',time()-1,$this->path,$this->domain,$this->secure,$this->httponly);
				unset($_COOKIE[$name]);
			}
		}
	}
}
//实现
//$cookie=CustomCookie::getInstance();
//var_dump($cookie);
//$cookie->set('aa',111);
//$cookie->set('bb',222);
//$cookie->set('cc',333,['expire'=>time()+3600]);
//echo $cookie->get('aa');
//$cookie->set('userinfo',['username'=>'king','age'=>23]);
//var_dump($cookie->get('userinfo'));
//$cookie->delete("cc");
//$cookie->deleteAll();
?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值