PHP MVC Framework Class
Use braces {}! Can't say this enough. PHP has made many mistakes, but allowing this syntax is by far the worst. Adding those braces only increases file size by 2 bits! And it increases readability so much!

if ( !isset(self::$instance) ) { self::$instance = new self(); }


I'd check out the magic setter and getter methods (__set() and __get() respectively). Instead of calling a set or get method manually you just pass the variable you want. So...

$sessObj-&gt;set('var', 'value');
$sessObj-&gt;set('array', 'value', TRUE);
var_dump($sessObj-&gt;get('var'));
var_dump($sessObj-&gt;get('array'));
//compared to
$sessObj-&gt;var = 'value';
$sessObj-&gt;array[] = 'value';
var_dump($sessObj-&gt;var);
var_dump($sessObj-&gt;array);


Why are you not using $this? I mean, I don't use static methods at all really so correct me if I'm wrong, but from what I understand you can still access the internal instance by just using $this. So replace all Session::open() with $this. Even if you can't I would just dump all those static methods just for that alone. Why is everything static? If its not necessary, and I can't imagine why it would be, it shouldn't be static.

$this-&gt;set($key, $single_property);


Because my suggestions would change this code so drastically I will finish the review here. Hope this helps!