2013-04-10 72 views
0

找到this question后,我得到了我的Silex会议,以至少获得一个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页面没有。任何人都能帮我弄清楚为什么?

回答

0

我的解决方案原来是PDO数据库连接没有正确设置(其中一个列名是错误的)。但是,默认情况下,PDO MySQL连接在出错时不会抛出异常,它只是设置ErrorInfo()的详细信息。一旦我打开了针对我的PDO连接的异常抛出,我发现了错误并修复了它。我还向Symfony提交了一个补丁,以确保会话PDO对象启用了异常抛出功能,以避免其他人触及此问题。