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 (IMG:
style_emoticons/default/questionmark.gif)
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"));
$app->register(new Silex\Provider\DoctrineServiceProvider
(), array( 'db.options' => $app['config']['db']
));
$app->register(new CHH\Silex\CacheServiceProvider
, array( "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;
Ten post edytował tabbi 23.11.2013, 23:19:36