mam problem gdyż po wywołaniu żądania prawidłowo tworzona jest sesja ale niestety obraz po kilku odświeżeniach wygląda tak, że identyfikator jest wpierw tworzony z pustym polem value a następnie wypełnianiy ? Jak temu zapobiec oraz czy istnieje możliwość określenia czasu sesji dla wersji z PDO

CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `session_value` longtext COLLATE utf8_unicode_ci NOT NULL, `session_time` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -- Dumping data for table `session` -- INSERT INTO `session` (`session_id`, `session_value`, `session_time`) VALUES ('e9ns6gt9s3sqpbluj2iqbnqt50', '', 1385244402), ('e9ns6gt9s3sqpbluj2iqbnqt50', 'X3NmMl9hdHRyaWJ1dGVzfGE6MDp7fV9zZjJfZmxhc2hlc3xhOjA6e31fc2YyX21ldGF8YTozOntzOjE6
InUiO2k6MTM4NTI0NDQwMjtzOjE6ImMiO2k6MTM4NTI0NDQwMjtzOjE6ImwiO3M6MToiMCI7fQ==', 1385244402), ('e9ns6gt9s3sqpbluj2iqbnqt50', '', 1385244527), ('e9ns6gt9s3sqpbluj2iqbnqt50', 'X3NmMl9hdHRyaWJ1dGVzfGE6MDp7fV9zZjJfZmxhc2hlc3xhOjA6e31fc2YyX21ldGF8YTozOntzOjE6
InUiO2k6MTM4NTI0NDUyNztzOjE6ImMiO2k6MTM4NTI0NDUyNztzOjE6ImwiO3M6MToiMCI7fQ==', 1385244527), ('e9ns6gt9s3sqpbluj2iqbnqt50', '', 1385244536), ('e9ns6gt9s3sqpbluj2iqbnqt50', 'X3NmMl9hdHRyaWJ1dGVzfGE6MDp7fV9zZjJfZmxhc2hlc3xhOjA6e31fc2YyX21ldGF8YTozOntzOjE6
InUiO2k6MTM4NTI0NDUzNjtzOjE6ImMiO2k6MTM4NTI0NDUzNjtzOjE6ImwiO3M6MToiMCI7fQ==', 1385244536);
Kod aplikacji:
use Silex\Application; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler; use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage; $app = new Application(); $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/errors.php")); $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/database.php")); $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/session.php")); $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/cache.php")); 'db.options' => $app['config']['db'] )); "driver" => $app['config']['cache_driver'] )) )); $app->register(new Silex\Provider\SessionServiceProvider()); $app['session.db_options'] = $app['config']['session']; $app['session.storage.handler'] = $app->share(function () use ($app) { return new PdoSessionHandler( $app['db']->getWrappedConnection(), $app['session.db_options'], $app['session.storage.options'] ); }); $app->before(function ($request) { $request->getSession()->start(); }); $app->get('/', function () { $output = ''; return $output; }); return $app;
Okej problem wynikał z błędnej definicji tabeli i braku primary_key dla session_id.
CREATE TABLE IF NOT EXISTS `session` ( `session_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `session_value` longtext COLLATE utf8_unicode_ci NOT NULL, `session_time` int(11) NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;