My current project needs to be able to store, access, and modify multi-level arrays in $_SESSION. Unfortunately, vanilla Phalcon only allows for single key-value pairs.
I've therefore built a wrapper for \Phalcon\Session\Adapter\Files that allows you to pass an array to get(), set(), and has() instead of a string.  The array will contain the key at each level of the array.  So ["filter","organization","name"] would reference the name element inside the organization array, which is inside the filter array.
Example set() usage
$this->session->set(['filter','organization','name'],'Widgets Inc.');Contents of $_SESSION as a result:
Array
(
    [filter] => Array
        (
            [organization] => Array
                (
                    [name] => Widgets Inc.
                )
        )
)You can overwrite and modify as well:
$this->session->set('filter',['organization'=>['name'=>'Humbug','city'=>'Edmonton']]);
$this->session->set(['filter','organization','city'],'Calgary');Array
(
    [filter] => Array
        (
            [organization] => Array
                (
                    [name] => Humbug
                    [city] => Calgary
                )
        )
)Note the first line of code uses just a simple string key, rather than an array. This is still supported.
You can also "deep-set" an element multiple levels down without having to create each level. So if you have an empty session & have this code:
$this->session->set(['filter','organization','city'],'Calgary');this class will create $_SESSION["filter"] with one element, organization, that is itself an array with one element, city.
Example get() usage
Much less sexy, but it works the same.
With $_SESSION populated like this:
Array
(
    [filter] => Array
        (
            [organization] => Array
                (
                    [name] => Humbug
                    [city] => Calgary
                )
        )
)this code:
$this->session->get(['filter','organization','name']);would return Humbug.
You can also retrieve not just end values, but arrays too:
$this->session->get(['filter','organization']);would return
Array
(
    [name] => Humbug
    [city] => Calgary
)Example has() usage
has() works just like you'd expect.  With $_SESSION populated like this:
Array
(
    [filter] => Array
        (
            [organization] => Array
                (
                    [name] => Humbug
                    [city] => Calgary
                )
        )
)these codes:
$this->session->has(['filter','organization','name']);
$this->session->has(['filter','organization']);
$this->session->has('filter');will all return TRUE, while this code
$this->session->has(['filter','organization','phone_number']);will return FALSE.
Actual class code
class Session extends \Phalcon\Session\Adapter\Files{
    public function set($keys,$value = NULL){
        if(is_scalar($keys)){
            $_SESSION[$keys] = $value;
        }
        else if(is_array($keys)){
            $target =& $_SESSION;
            $setting = end($keys);
            foreach($keys as $key){
                if($key != $setting){
                    if(!isset($target[$key])){
                        $target[$key] = [];
                    }           
                }
                $target =& $target[$key];
            }
            $target = $value;
        }
    }
    public function get($keys,$defaultValue = NULL){
        if(is_scalar($keys)){
            return $_SESSION[$keys];
        }
        else if(is_array($keys)){
            $target =& $_SESSION;
            $getting = end($keys);
            foreach($keys as $key){
                if(isset($target[$key])){
                    if($key == $getting){
                        return $target[$key];
                    }
                    else if(is_array($target[$key])){
                        $target =& $target[$key];
                    }
                }
                else{
                    return $defaultValue;
                }
            }
        }
    }
    public function has($keys){
        if(is_scalar($keys)){
            return parent::has($keys);
        }
        else if(is_array($keys)){
            $target =& $_SESSION;
            foreach($keys as $key){
                if(isset($target[$key])){
                    $target =& $target[$key];
                }
                else{
                    return FALSE;
                }
            }
            return TRUE;
        }
    }
}