public function register(Application $app)
{
$app['session'] = $app->share(function ($app) {
return new Session($app['session.storage'], $app['session.bag.attribute'], $app['session.bag.flash']);
});
$app['session.storage'] = $app->share(function ($app) {
$options = $app['session.options_bag'];
$handler = $app['session.handler_factory']($options['save_handler'], $options);
return new SessionStorage($options, $handler, $app['session.generator'], $app['session.serializer']);
});
$app['session.listener'] = $app->share(function ($app) {
return new SessionListener($app['session'], $app['session.options_bag']);
});
$this->registerOptions($app);
$this->registerHandlers($app);
$app['session.generator'] = $app->share(function () use($app) {
return new RandomGenerator($app['randomgenerator'], $app['session.generator.bytes_length']);
});
$app['session.generator.bytes_length'] = 32;
$app['session.serializer'] = $app->share(function () {
return new NativeSerializer();
});
$app['session.bag.attribute'] = function () {
return new AttributeBag();
};
$app['session.bag.flash'] = function () {
return new FlashBag();
};
$app['session.bag.metadata'] = function () {
return new MetadataBag();
};
$this->configure($app);
}