Witam,

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 questionmark.gif

  1. CREATE TABLE IF NOT EXISTS `session` (
  2. `session_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  3. `session_value` longtext COLLATE utf8_unicode_ci NOT NULL,
  4. `session_time` int(11) NOT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  6.  
  7. --
  8. -- Dumping data for table `session`
  9. --
  10.  
  11. INSERT INTO `session` (`session_id`, `session_value`, `session_time`) VALUES
  12. ('e9ns6gt9s3sqpbluj2iqbnqt50', '', 1385244402),
  13. ('e9ns6gt9s3sqpbluj2iqbnqt50', 'X3NmMl9hdHRyaWJ1dGVzfGE6MDp7fV9zZjJfZmxhc2hlc3xhOjA6e31fc2YyX21ldGF8YTozOntzOjE6
    InUiO2k6MTM4NTI0NDQwMjtzOjE6ImMiO2k6MTM4NTI0NDQwMjtzOjE6ImwiO3M6MToiMCI7fQ=='
    , 1385244402),
  14. ('e9ns6gt9s3sqpbluj2iqbnqt50', '', 1385244527),
  15. ('e9ns6gt9s3sqpbluj2iqbnqt50', 'X3NmMl9hdHRyaWJ1dGVzfGE6MDp7fV9zZjJfZmxhc2hlc3xhOjA6e31fc2YyX21ldGF8YTozOntzOjE6
    InUiO2k6MTM4NTI0NDUyNztzOjE6ImMiO2k6MTM4NTI0NDUyNztzOjE6ImwiO3M6MToiMCI7fQ=='
    , 1385244527),
  16. ('e9ns6gt9s3sqpbluj2iqbnqt50', '', 1385244536),
  17. ('e9ns6gt9s3sqpbluj2iqbnqt50', 'X3NmMl9hdHRyaWJ1dGVzfGE6MDp7fV9zZjJfZmxhc2hlc3xhOjA6e31fc2YyX21ldGF8YTozOntzOjE6
    InUiO2k6MTM4NTI0NDUzNjtzOjE6ImMiO2k6MTM4NTI0NDUzNjtzOjE6ImwiO3M6MToiMCI7fQ=='
    , 1385244536);


Kod aplikacji:

  1. use Silex\Application;
  2.  
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpKernel\Exception\HttpException;
  6. use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler;
  7. use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
  8.  
  9. $app = new Application();
  10.  
  11. $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/errors.php"));
  12. $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/database.php"));
  13. $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/session.php"));
  14. $app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../resources/config/cache.php"));
  15. $app->register(new Silex\Provider\DoctrineServiceProvider(), array(
  16. 'db.options' => $app['config']['db']
  17. ));
  18. $app->register(new CHH\Silex\CacheServiceProvider, array(
  19. 'cache.options' => array("default" => array(
  20. "driver" => $app['config']['cache_driver']
  21. ))
  22. ));
  23.  
  24. $app->register(new Silex\Provider\SessionServiceProvider());
  25.  
  26. $app['session.db_options'] = $app['config']['session'];
  27. $app['session.storage.handler'] = $app->share(function () use ($app) {
  28. return new PdoSessionHandler(
  29. $app['db']->getWrappedConnection(),
  30. $app['session.db_options'],
  31. $app['session.storage.options']
  32. );
  33. });
  34.  
  35. $app->before(function ($request) {
  36. $request->getSession()->start();
  37. });
  38.  
  39. $app->get('/', function () {
  40. $output = '';
  41. return $output;
  42. });
  43.  
  44. return $app;


Okej problem wynikał z błędnej definicji tabeli i braku primary_key dla session_id.

  1. CREATE TABLE IF NOT EXISTS `session` (
  2. `session_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  3. `session_value` longtext COLLATE utf8_unicode_ci NOT NULL,
  4. `session_time` int(11) NOT NULL,
  5. PRIMARY KEY (`session_id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;