ZF-2103: Zend_Session_Namespace - Optional argument to create namespace in deeper nodes


Currently, the namespace component creates namespaces only at the root of the session:

$user = new Zend_Session_Namespace( 'user' );

=> $_SESSION['user'] = array()

What if I want to store data deeper in the auth node to just group it and reduce clutter (aka modules) and to be able to count the number of items/namespaces in a node:

$_SESSION['auth']['user']['id'] = 1;
([node][namespace][key] = value)

In the above case, it would be much more powerful to be able to create the namespace under the 'auth' node so we could configure the keys in the 'user' namespace. We could introduce an optional 'node' argument to the Zend_Session_Namespace::__construct(), like so:

$user = new Zend_Session_Namespace( 'user', 'auth' );
[create the user namespace under auth node - auth node created automatically if it does not exist in session]

We can even go as deeper as we could by specifying an intelligent node-path:

$user = new Zend_Session_Namespace( 'user', 'auth:node2:node3' );
(create the user namespace under $_SESSION[auth][node2][node3] - all created automatically if they do not exist in session)

I guess the above feature adds more muscle to the namespace component and enables us to use it more powerfully.



This doesn't appear to have been fixed in 1.5.0. Please update if this is not correct.

How does this benefit over using a smarter naming convention for the namespaces? For example like

$user = new Zend_Session_Namespace("user-auth"); 

OR over

$user = new Zend_Session_Namespace("user-auth"); 
$user->auth->node2 = 'value';


The bigger problem with adding more/deeper nodes is that the serialized version will take up more space in the file/database whatever.

Ill categorize as nice to have / next minor, but at currently I am not completely convinced yet. Perhaps talk it over in #zftalk.dev with some other people.


That's what I've been doing these days but it involves a lot of consistent code and work to maintain data in appropriate nodes. If we have the namespace created in a deeper node, keys added to the namespace automatically appear in the child node of the namespaced node and so it becomes much easier to maintain data and focus on business logic. Furthermore, the items under the namespace node can now be counted, can be disabled from adding more keys than a specified threshold, configured to expire, etc. and so we can create categorized namespaces with typical behaviors for the data inside the namespaces.

Interesing feature, but I am not sure we'll have time to implement this within the 1.0 branch.

We concede that this component needs a rewrite, so ideas are being logged here: