Session should be initialized when you first time utilize that storage medium.
Most likely as:
namespace Mapper;
class Session
{
public function prepare()
{
session_set_cookie_params( ... ); // if needed
session_start();
}
public function store(SomeInterface $object) { ... }
public function retrieve(SomeInterface $object) { ... }
}
.. where prepare()
method is called on session instance before the factory releases it to "general application".
Basically, from model layer's point of view, session is just another type of storage, that you utilize with some sort of mapper. This mapper can be shared throughout the application using factory, which makes sure, that all the parts of model layer are using same object for abstraction the session.
Controllers should not be even aware, that the session is utilized somewhere withing model layer. Only part of model layer, that controllers are aware of, should be the services, through which controller alters the sate of model layer.