Folosim $_COOKIE in loc de $_SESSION

Tema a venit de mult timp, de cand am inceput viata de programmist, incercam sa inteleg detaliile PHP. In acel moment ma gandeam la asa o nedreptate : cu sessia puteam lucra ca un masiv asociativ($_SESSION), dar cu cookie trebuia de folosit functia setcookie(). Dupa aia am acumulat mai multa experienta si mi-am dat seama de ce este facut asa si nu altfel.
Timpul trece si PHP nu sta pe loc, a aparaut asa un lucru frumos cum este SPL, o posibilitate care da acces la object ca la o matrice, şi anume punerea în aplicare a interfetei ArrayAccess .
Si uite ca acum mi-am amentit de ideea din copilarie, vezi cum am realizat:

<?php
//e deajuns sa folsim
$_COOKIE['lang'] = 'ro';
?>

<?php

class CookieStorage implements ArrayAccess{

// timpul default pentru cookie
const DEFAULT_EXPIRE_TIME = 1411200; // 2 saptamini

//variabila pentru Date
private $_storage;

//constructor pt inscrierea din masivul parinte $_COOKIE
public function __construct($cookies) {
$this->_storage = $cookies;
}

// metoda standart ArrayAccess pt verificarea existentei elementului
public function offsetExists ($offset) {
return isset ($this->_storage[$offset]);
}

// ArrayAccess pentru eliminarea elementului
public function offsetUnset ($offset) {
unset($this->_storage[$offset]);
}

// metoda pt citire a elementului cookie
public function offsetGet ($offset) {
return $this->_storage[$offset];
}

// metoda pentru inscriere a elementului
public function offsetSet ($offset, $value) {
if( $this->_setCookie($offset, $value) ){
$this->_storage[$offset] = $value;
}else{
trigger_error('Cookie value was not set', E_USER_WARNING);
}

}

// wrapper pentru funcţia setcookie
private function _setCookie( $name, $value, $expire = 0, $path = '/', $domain = false, $secure = false , $httponly = false ){

if (!headers_sent()){
if ($domain === false){
$domain = $_SERVER['HTTP_HOST'];
}

if( $expire == 0 ){
$expire = time() + self::DEFAULT_EXPIRE_TIME;
}

return setcookie ( $name, $value, $expire, $path, $domain, $secure, $httponly );

}

return false;
}
}

// iniţializarea cookie-urilor noastre şi redefinirea matricei globale

$_COOKIE = new CookieStorage( $_COOKIE );

P/S: un avantaj este ca initializarea merge si in browser si pe server