Ezequiel2 0 Denunciar post Postado Abril 26, 2009 Com a classe abaixo você serializa e criptografa seus cookies, e ele deserializa e descriptografa seus cookies automaticamente. <?php class cookies { var $encript_cookie_key; var $has_cookies_enabled = false; var $last_insertation; var $domain; var $data = array(); function cookies($key = "abcde1234") { global $_COOKIE; $this->encript_cookie_key = $key; $this->data = array_map(array(&$this, "maybe_decript"), $_COOKIE); foreach($this->data as $k=>$v) $this->$k = $v; $_COOKIE = $this->data; preg_match("/([\.]+)(.*)/i", $_SERVER["HTTP_HOST"], $domain); $this->domain = $domain[0]; if(!$this->has_cookies_enabled()) return; else $this->has_cookies_enabled = true; } function has_cookies_enabled() { global $_COOKIE; if($this->has_cookies_enabled) return true; if(ini_get("session.use_cookies")) { if(!$_COOKIE[ini_get("session.name")]) { setcookie(ini_get("session.name"), session_id(), 0, "/", ini_get("session.cookie_domain")); return (isset($_COOKIE[ini_get("session.name")])); } return true; } else { if(!$_COOKIE[ini_get("session.name")]) { setcookie(ini_get("session.name"), session_id(), 0, "/", ini_get("session.cookie_domain")); return (isset($_COOKIE[ini_get("session.name")])); } return true; } return false; } function change_encript_key($key) { $this->encript_cookie_key = $key; } function set($name, $value, $expire = 0, $base64 = true, $encript = true, $path = "/", $domain = "", $secure = false, $httponly = false) { if(!$domain) $domain = $this->domain; if(setcookie($name, $this->encript($value, $base64, $encript), $expire, $path, $domain, $secure, $httponly)) { $this->$name = $value; $this->data[$name] = $value; $this->last_insertation = $name; global $_COOKIE; if(isset($_COOKIE[$name])) { $_COOKIE[$name] = $this->maybe_decript($_COOKIE[$name]); } return true; } return false; } function remove($name, $path = "/", $domain = "") { global $_COOKIE; unset($this->$name); unset($this->data[$name]); unset($_COOKIE[$name]); if(!$domain) $domain = $this->domain; setcookie($name, "", time() - 3600, $path, $domain); } function clean() { if(!$this->has_cookies_enabled()) return; foreach($this->data as $name => $value) $this->remove($name); } function encript($string, $base64 = true, $encript = true) { $string = $this->maybe_serialize($string); if($encript) { if(function_exists("mcrypt_encrypt")) : $iv_size = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $result = mcrypt_encrypt(MCRYPT_XTEA, $this->encript_cookie_key, $string, MCRYPT_MODE_ECB, $iv); else : $result = ''; for($i=1; $i<=strlen($string); $i++) : $char = substr($string, $i-1, 1); $keychar = @substr($this->encript_cookie_key, ($i % strlen($this->encript_cookie_key))-1, 1); $char = chr(ord($char)+ord($keychar)); $result.=$char; endfor; endif; $inc = $result.substr(md5($string), 0, 5); } else { $inc = $string; } if($base64) $inc = substr(md5($inc), 0, 4).base64_encode($inc); return trim($inc); } function maybe_decript($string) { $string = $this->base54_decript($string); $md5 = substr($string, -5); $encript = substr($string, 0, -5); if(function_exists("mcrypt_encrypt")) : $iv_size = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $result = rtrim(mcrypt_decrypt(MCRYPT_XTEA, $this->encript_cookie_key, $encript, MCRYPT_MODE_ECB, $iv), "\0\4"); else : $result = ''; for($i=1; $i<=strlen($encript); $i++) : $char = substr($encript, $i-1, 1); $keychar = @substr($this->encript_cookie_key, ($i % strlen($this->encript_cookie_key))-1, 1); $char = chr(ord($char)-ord($keychar)); $result.=$char; endfor; endif; if($md5 != substr(md5($result), 0, 5)) return $this->maybe_unserialize($string); return $this->maybe_unserialize($result); } function base54_decript($string) { $md5 = substr($string, 0, 4); $string2 = base64_decode(substr($string, 4)); if($md5 != substr(md5($string2), 0, 4)) return $this->maybe_unserialize($string); return $string2; } function maybe_serialize($var) { return maybe_serialize($var); } function maybe_unserialize($var) { return maybe_unserialize($var); } } if(!function_exists("maybe_unserialize")) : function maybe_unserialize( $original ) { if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in if ( false !== $gm = @unserialize( $original ) ) return $gm; return $original; } endif; if(!function_exists("is_serialized")) : function is_serialized( $data ) { // if it isn't a string, it isn't serialized if ( !is_string( $data ) ) return false; $data = trim( $data ); if ( 'N;' == $data ) return true; if ( !preg_match( '/^([adObis]):/', $data, $badions ) ) return false; switch ( $badions[1] ) { case 'a' : case 'O' : case 's' : if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) ) return true; break; case 'b' : case 'i' : case 'd' : if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) ) return true; break; } return false; } endif; if(!function_exists("is_serialized_string")) : function is_serialized_string( $data ) { // if it isn't a string, it isn't a serialized string if ( !is_string( $data ) ) return false; $data = trim( $data ); if ( preg_match( '/^s:[0-9]+:.*;$/s', $data ) ) // this should fetch all serialized strings return true; return false; } endif; if(!function_exists("maybe_serialize")) : function maybe_serialize( $data ) { if ( is_array( $data ) || is_object( $data ) ) return serialize( $data ); if ( is_serialized( $data ) ) return serialize( $data ); return $data; } endif; $cookies = new cookies(); if($cookies->has_cookies_enabled) { $cookies->set("colors", array("blue", "red", "brown")); print_r($cookies->data["colors"]); print_r($cookies->colors); print_r($_COOKIE["colors"]); } else { die("you don't have cookies enabled!"); exit; } ?> Compartilhar este post Link para o post Compartilhar em outros sites