<?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();