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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>