[2.3][HttpFoundation] PDO Session handling enhancements
This commit is contained in:
parent
3cb87a3f95
commit
ce8a441c10
|
@ -2,8 +2,12 @@ CHANGELOG
|
|||
=========
|
||||
|
||||
2.3.0
|
||||
-----
|
||||
|
||||
* `UploadedFile::isValid` now returns false if the file was not uploaded via HTTP (in a non-test mode)
|
||||
* Improved error-handling of `\Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler`
|
||||
to ensure the supplied PDO handler throws Exceptions on error (as the class expects). Added related test cases
|
||||
to verify that Exceptions are properly thrown when the PDO queries fail.
|
||||
|
||||
2.2.0
|
||||
-----
|
||||
|
|
|
@ -48,7 +48,9 @@ class PdoSessionHandler implements \SessionHandlerInterface
|
|||
if (!array_key_exists('db_table', $dbOptions)) {
|
||||
throw new \InvalidArgumentException('You must provide the "db_table" option for a PdoSessionStorage.');
|
||||
}
|
||||
|
||||
if (\PDO::ERRMODE_EXCEPTION !== $pdo->getAttribute(\PDO::ATTR_ERRMODE)) {
|
||||
throw new \InvalidArgumentException(sprintf('"%s" requires PDO error mode attribute be set to throw Exceptions (i.e. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION))', __CLASS__));
|
||||
}
|
||||
$this->pdo = $pdo;
|
||||
$this->dbOptions = array_merge(array(
|
||||
'db_id_col' => 'sess_id',
|
||||
|
|
|
@ -97,7 +97,7 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||
*/
|
||||
public function __construct(array $options = array(), $handler = null, MetadataBag $metaBag = null)
|
||||
{
|
||||
ini_set('session.cache_limiter', ''); // disable by default because it's managed by HeaderBag (if used)
|
||||
session_cache_limiter(''); // disable by default because it's managed by HeaderBag (if used)
|
||||
ini_set('session.use_cookies', 1);
|
||||
|
||||
if (version_compare(phpversion(), '5.4.0', '>=')) {
|
||||
|
|
|
@ -24,10 +24,48 @@ class PdoSessionHandlerTest extends \PHPUnit_Framework_TestCase
|
|||
}
|
||||
|
||||
$this->pdo = new \PDO("sqlite::memory:");
|
||||
$this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
|
||||
$sql = "CREATE TABLE sessions (sess_id VARCHAR(255) PRIMARY KEY, sess_data TEXT, sess_time INTEGER)";
|
||||
$this->pdo->exec($sql);
|
||||
}
|
||||
|
||||
public function testIncompleteOptions()
|
||||
{
|
||||
$this->setExpectedException('InvalidArgumentException');
|
||||
$storage = new PdoSessionHandler($this->pdo, array(), array());
|
||||
}
|
||||
|
||||
public function testWrongPdoErrMode()
|
||||
{
|
||||
$pdo = new \PDO("sqlite::memory:");
|
||||
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_SILENT);
|
||||
$pdo->exec("CREATE TABLE sessions (sess_id VARCHAR(255) PRIMARY KEY, sess_data TEXT, sess_time INTEGER)");
|
||||
|
||||
$this->setExpectedException('InvalidArgumentException');
|
||||
$storage = new PdoSessionHandler($pdo, array('db_table' => 'sessions'), array());
|
||||
}
|
||||
|
||||
public function testWrongTableOptionsWrite()
|
||||
{
|
||||
$storage = new PdoSessionHandler($this->pdo, array('db_table' => 'bad_name'), array());
|
||||
$this->setExpectedException('RuntimeException');
|
||||
$storage->write('foo', 'bar');
|
||||
}
|
||||
|
||||
public function testWrongTableOptionsRead()
|
||||
{
|
||||
$storage = new PdoSessionHandler($this->pdo, array('db_table' => 'bad_name'), array());
|
||||
$this->setExpectedException('RuntimeException');
|
||||
$storage->read('foo', 'bar');
|
||||
}
|
||||
|
||||
public function testWriteRead()
|
||||
{
|
||||
$storage = new PdoSessionHandler($this->pdo, array('db_table' => 'sessions'), array());
|
||||
$storage->write('foo', 'bar');
|
||||
$this->assertEquals('bar', $storage->read('foo'), 'written value can be read back correctly');
|
||||
}
|
||||
|
||||
public function testMultipleInstances()
|
||||
{
|
||||
$storage1 = new PdoSessionHandler($this->pdo, array('db_table' => 'sessions'), array());
|
||||
|
|
Reference in New Issue