<?php
namespace ticky;
class cookie {
private $config;
public function __construct() {
$this->config = config::get('cookie');
}
public function set($name, $value, $expire = null, $path = null, $domain = null, $secure = null) {
$expire = $expire ? $expire : $this->config['expire'];
$path = $path ? $path : $this->config['path'];
$domain = $domain ? $domain : $this->config['domain'];
$secure = $secure ? $secure : $this->config['secure'];
if (is_array($value)) {
$value = array_map([$this, 'encrypt'], $value);
} else {
$value = $this->encrypt($value);
}
return setcookie($name, serialize($value), time() + $expire, $path, $domain, $secure);
}
public function get($name) {
$key = $this->key($name)[0];
if ($this->has($key)) {
$value = unserialize($_COOKIE[$key]);
if (!is_array($value)) {
return $this->decrypt($value);
}
$value = array_map([$this, 'decrypt'], $value);
if ($key = $this->key($name)[1]) {
return $value[$key];
}
return $value;
}
return null;
}
public function has($name) {
return isset($_COOKIE[$name]);
}
public function delete($name) {
return $this->set($name, '', -1);
}
public function clean() {
foreach ($_COOKIE as $key => $val) {
setcookie($key, '', -1, '/');
}
}
private function key($name) {
return explode('.', $name);
}
private function encrypt($value) {
return crypt::instance()->encrypt($value);
}
private function decrypt($value) {
return crypt::instance()->decrypt($value);
}
}