El proveedor SessionServiceProvider ofrece un servicio para almacenar datos persistentes entre peticiones.
session.storage.save_path (opcional): La trayectoria para el NativeFileSessionHandler, —por omisión— es el valor de sys_get_temp_dir().
session.storage.options: Un arreglo de opciones que se pasa al constructor del servicio session.storage.
En caso del NativeSessionStorage predeterminado, las posibles opciones son:
Sin embargo, todas estas son opcionales. Las sesiones duran tanto como el navegador permanezca abierto. Para evitar esto, establece la opción lifetime.
session.test: Cuándo simular sesiones o no (útil cuándo escribes pruebas funcionales).
$app->register(new Silex\Provider\SessionServiceProvider());
El proveedor Session proporciona un servicio session. He aquí un ejemplo que autentica a un usuario y crea una sesión para él:
use Symfony\Component\HttpFoundation\Response;
$app->get('/login', function () use ($app) {
$username = $app['request']->server->get('PHP_AUTH_USER', false);
$password = $app['request']->server->get('PHP_AUTH_PW');
if ('igor' === $username && 'password' === $password) {
$app['session']->set('user', array('username' => $username));
return $app->redirect('/account');
}
$response = new Response();
$response->headers->set('WWW-Authenticate', sprintf('Basic realm="%s"', 'site_login'));
$response->setStatusCode(401, 'Please sign in.');
return $response;
});
$app->get('/account', function () use ($app) {
if (null === $user = $app['session']->get('user')) {
return $app->redirect('/login');
}
return "Welcome {$user['username']}!";
});
Si tu sistema está utilizando una configuración de sesión personalizada (como un controlador de una extensión PHP) entonces necesitas deshabilitar el NativeFileSessionHandler poniendo session.storage.handler a null. En este caso, tú mismo tendrás que configurar session.save_path en tu archivo ini.
$app['session.storage.handler'] = null;