Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;
}
?>Carregando comentários...