0

この質問を見つけた後、少なくとも ID が割り当てられるように Silex セッションを取得しましたが、セッション データが異なるページ ビュー間で保存されることはありません。

require(__DIR__.'/vendor/autoload.php'); // Composer autoload

$app = new Silex\Application();
$app['debug'] = true;

$app['db'] = $app->share(function() { // Database connector as a service
    return new PDO('mysql:host=localhost;dbname=myawesome_db', 'user', 'paswd');
});

$app['session.db_options'] = array(
    'db_table'      => 'php_sessions',
    'db_id_col'     => 'session_id',
    'db_data_col'   => 'session_value',
    'db_time_col'   => 'session_time',
);

$app['session.storage.pdohandler'] = $app->share(function () use ($app) {
    return new Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler(
        $app['db'],
        $app['session.db_options'],
        $app['session.storage.options']
    );
});
$app['session.storage'] = $app->share(function() use ($app) {
    return new Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage(
        $app['session.storage.options'],
        $app['session.storage.pdohandler']
    );
});
$app->register(new Silex\Provider\SessionServiceProvider()); // Start session management
$app['session']->start();

$app->get('/session-set', function() use ($app) {
    $app['session']->set('foobar', 'test');
    $app['session']->save();
    $out = "User session is: ".$app['session']->getId()."<br />\n";
    $out .= "Session variable is: ".var_export($app['session']->get('foobar'), true)."<br />\n";
    return $out;
});
$app->get('/session-get', function() use ($app) {
    $out = "User session is: ".$app['session']->getId()."<br />\n";
    $out .= "Session variable is: ".var_export($app['session']->get('foobar'), true)."<br />\n";
    return $out;
});

$app->run(); // Off into the sunset

ページにはセッション変数の値が表示されますが、ページ/session-setには表示されません。理由を理解するのを手伝ってくれる人はいますか?foobar/session-get

4

1 に答える 1

0

私の解決策は、PDO データベース接続が正しく設定されていないことでした (列名の 1 つが間違っていました)。ただし、デフォルトでは、PDO MySQL 接続はエラーが発生しても例外をスローせず、ErrorInfo()詳細を設定するだけです。PDO 接続の例外スローをオンにすると、エラーが見つかり、修正されました。また、Symfony にパッチを提出して、セッション PDO オブジェクトで例外スローが有効になっていることを確認し、他のユーザーがこの問題に遭遇するのを回避しました。

于 2013-04-22T17:29:02.137 に答える