Per qualsiasi motivo, le sessioni non funzionano nella mia app Silex. Ho impostato error_reporting nel mio php.ini su E_ALL | E_STRICT
e gli errori vengono visualizzati e registrati. Niente da vedere lì. Ma per qualche motivo non viene creata alcuna sessione e non c'è alcun file in /project-root/tmp/sessions/
(e anche no, quando si usa il percorso predefinito session.save). Passando a PdoSessionStorage, per escludere problemi con permessi di lettura/scrittura sul filesystem, non ha portato risultati. Ho anche provato a passare tra $app['session']
, $request->getSession()
e $app['request']->getSession()
inutilmente.Le sessioni non funzionano in Silex App
Sono ad una perdita quanto a dove altro cercare i problemi ...
Ecco un test molto semplice-app che ho scritto (use
è omesso per risparmiare spazio). Fondamentalmente questo test mostra ciò che cerco di ottenere nella mia app vera e propria. Voglio memorizzare un array nella sessione. In $app->before()
controllo se il valore è impostato e quindi lo passiamo al ramoscello per essere visualizzato, ad es. informazioni di login: You are logged in as {{ user.name }}
:
$app = new Application;
$app['debug'] = true;
$app->register(new SessionServiceProvider, array(
'session.storage.save_path' => dirname(__DIR__) . '/tmp/sessions'
));
$app->register(new TwigServiceProvider, array(
'twig.path' => __DIR__ . '/views'
));
$app->before(function (Request $request) use ($app) {
// if ($app['debug'] == true) {
// $request->getSession()->set('test', array('key' => 'value'));
// }
if ($request->hasPreviousSession() && $request->getSession()->has('test')) {
$test = $request->getSession()->get('test');
if ($test !== null) {
$app['twig']->addGlobal('before', $test);
}
}
});
$app->get('/', function() use ($app) {
return $app['twig']->render('sessiontest.twig');
});
$app->get('/test', function() use ($app) {
$app['session']->set('test', array('key' => 'value'));
return $app['twig']->render('sessiontest.twig',
array('get' => $app['session']->get('test')));
});
$app->run();
sessiontest.twig assomiglia a questo:
<html>
<head><title>test</title></head>
<body>
{% if before is defined %}before: {{ before.key }}{% endif %}
{% if get is defined %}get: {{ get.key }}{% endif %}
</body>
</html>
Quando si va a/non viene visualizzato nulla, quando si va a/test solo "ottenere: test" viene visualizzato (ma non effettivamente memorizzati, in quanto né tornare a/né inneschi di aggiornamento prima).
Si prega di provare ad aggiungere questo in cima: '$ app-> prima (funzione ($ richiesta) {$ request-> getSession() -> start();});' – igorw
@igorw Grazie, che ha fatto il trucco . Non ho visto il legno per gli alberi, immagino. Sono così abituato alla sessione avviata dietro le quinte da lavorare con Zend Framework, che non ho nemmeno pensato di avviarla manualmente, – dbrumann
Lasciatemi postare nuovamente questa risposta come risposta. – igorw