| <?php |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| namespace think; |
|
|
| class Cookie |
| { |
| |
| |
| |
| protected static $config = [ |
| 'prefix' => '', |
| 'expire' => 0, |
| 'path' => '/', |
| 'domain' => '', |
| 'secure' => false, |
| 'httponly' => false, |
| 'setcookie' => true, |
| ]; |
|
|
| |
| |
| |
| protected static $init; |
|
|
| |
| |
| |
| |
| |
| |
| public static function init(array $config = []) |
| { |
| if (empty($config)) { |
| $config = Config::get('cookie'); |
| } |
|
|
| self::$config = array_merge(self::$config, array_change_key_case($config)); |
|
|
| if (!empty(self::$config['httponly'])) { |
| ini_set('session.cookie_httponly', 1); |
| } |
|
|
| self::$init = true; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public static function prefix($prefix = '') |
| { |
| if (empty($prefix)) { |
| return self::$config['prefix']; |
| } |
|
|
| return self::$config['prefix'] = $prefix; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public static function set($name, $value = '', $option = null) |
| { |
| !isset(self::$init) && self::init(); |
|
|
| |
| if (!is_null($option)) { |
| if (is_numeric($option)) { |
| $option = ['expire' => $option]; |
| } elseif (is_string($option)) { |
| parse_str($option, $option); |
| } |
|
|
| $config = array_merge(self::$config, array_change_key_case($option)); |
| } else { |
| $config = self::$config; |
| } |
|
|
| $name = $config['prefix'] . $name; |
|
|
| |
| if (is_array($value)) { |
| array_walk_recursive($value, 'self::jsonFormatProtect', 'encode'); |
| $value = 'think:' . json_encode($value); |
| } |
|
|
| $expire = !empty($config['expire']) ? |
| $_SERVER['REQUEST_TIME'] + intval($config['expire']) : |
| 0; |
|
|
| if ($config['setcookie']) { |
| setcookie( |
| $name, $value, $expire, $config['path'], $config['domain'], |
| $config['secure'], $config['httponly'] |
| ); |
| } |
|
|
| $_COOKIE[$name] = $value; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public static function forever($name, $value = '', $option = null) |
| { |
| if (is_null($option) || is_numeric($option)) { |
| $option = []; |
| } |
|
|
| $option['expire'] = 315360000; |
|
|
| self::set($name, $value, $option); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function has($name, $prefix = null) |
| { |
| !isset(self::$init) && self::init(); |
|
|
| $prefix = !is_null($prefix) ? $prefix : self::$config['prefix']; |
|
|
| return isset($_COOKIE[$prefix . $name]); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function get($name = '', $prefix = null) |
| { |
| !isset(self::$init) && self::init(); |
|
|
| $prefix = !is_null($prefix) ? $prefix : self::$config['prefix']; |
| $key = $prefix . $name; |
|
|
| if ('' == $name) { |
| |
| if ($prefix) { |
| $value = []; |
|
|
| foreach ($_COOKIE as $k => $val) { |
| if (0 === strpos($k, $prefix)) { |
| $value[$k] = $val; |
| } |
|
|
| } |
| } else { |
| $value = $_COOKIE; |
| } |
| } elseif (isset($_COOKIE[$key])) { |
| $value = $_COOKIE[$key]; |
|
|
| if (0 === strpos($value, 'think:')) { |
| $value = json_decode(substr($value, 6), true); |
| array_walk_recursive($value, 'self::jsonFormatProtect', 'decode'); |
| } |
| } else { |
| $value = null; |
| } |
|
|
| return $value; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function delete($name, $prefix = null) |
| { |
| !isset(self::$init) && self::init(); |
|
|
| $config = self::$config; |
| $prefix = !is_null($prefix) ? $prefix : $config['prefix']; |
| $name = $prefix . $name; |
|
|
| if ($config['setcookie']) { |
| setcookie( |
| $name, '', $_SERVER['REQUEST_TIME'] - 3600, $config['path'], |
| $config['domain'], $config['secure'], $config['httponly'] |
| ); |
| } |
|
|
| |
| unset($_COOKIE[$name]); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public static function clear($prefix = null) |
| { |
| if (empty($_COOKIE)) { |
| return; |
| } |
|
|
| !isset(self::$init) && self::init(); |
|
|
| |
| $config = self::$config; |
| $prefix = !is_null($prefix) ? $prefix : $config['prefix']; |
|
|
| if ($prefix) { |
| foreach ($_COOKIE as $key => $val) { |
| if (0 === strpos($key, $prefix)) { |
| if ($config['setcookie']) { |
| setcookie( |
| $key, '', $_SERVER['REQUEST_TIME'] - 3600, $config['path'], |
| $config['domain'], $config['secure'], $config['httponly'] |
| ); |
| } |
|
|
| unset($_COOKIE[$key]); |
| } |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| protected static function jsonFormatProtect(&$val, $key, $type = 'encode') |
| { |
| if (!empty($val) && true !== $val) { |
| $val = 'decode' == $type ? urldecode($val) : urlencode($val); |
| } |
| } |
| } |
|
|