|
@@ -19,23 +19,32 @@ namespace Symfony\Component\HttpFoundation\SessionStorage;
|
|
|
*/
|
|
|
class PdoSessionStorage extends NativeSessionStorage
|
|
|
{
|
|
|
- protected $db;
|
|
|
+ private $db;
|
|
|
+ private $dbOptions;
|
|
|
|
|
|
/**
|
|
|
+ * Constructor.
|
|
|
+ *
|
|
|
+ * @param \PDO $pdo A PDO instance
|
|
|
+ * @param array $options An associative array of session options
|
|
|
+ * @param array $dbOptions An associative array of DB options
|
|
|
+ *
|
|
|
* @throws \InvalidArgumentException When "db_table" option is not provided
|
|
|
+ *
|
|
|
+ * @see NativeSessionStorage::__construct()
|
|
|
*/
|
|
|
- public function __construct(\PDO $db, $options = null)
|
|
|
+ public function __construct(\PDO $db, array $options = array(), array $dbOptions = array())
|
|
|
{
|
|
|
+ if (!array_key_exists('db_table', $dbOptions)) {
|
|
|
+ throw new \InvalidArgumentException('You must provide the "db_table" option for a PdoSessionStorage.');
|
|
|
+ }
|
|
|
+
|
|
|
$this->db = $db;
|
|
|
- $options = array_merge(array(
|
|
|
+ $this->dbOptions = array_merge(array(
|
|
|
'db_id_col' => 'sess_id',
|
|
|
'db_data_col' => 'sess_data',
|
|
|
'db_time_col' => 'sess_time',
|
|
|
- ), $options);
|
|
|
-
|
|
|
- if (!array_key_exists('db_table', $options)) {
|
|
|
- throw new \InvalidArgumentException('You must provide the "db_table" option for a PdoSessionStorage.');
|
|
|
- }
|
|
|
+ ), $dbOptions);
|
|
|
|
|
|
parent::__construct($options);
|
|
|
}
|
|
@@ -98,8 +107,8 @@ class PdoSessionStorage extends NativeSessionStorage
|
|
|
public function sessionDestroy($id)
|
|
|
{
|
|
|
// get table/column
|
|
|
- $dbTable = $this->options['db_table'];
|
|
|
- $dbIdCol = $this->options['db_id_col'];
|
|
|
+ $dbTable = $this->dbOptions['db_table'];
|
|
|
+ $dbIdCol = $this->dbOptions['db_id_col'];
|
|
|
|
|
|
// delete the record associated with this id
|
|
|
$sql = 'DELETE FROM '.$dbTable.' WHERE '.$dbIdCol.'= ?';
|
|
@@ -127,8 +136,8 @@ class PdoSessionStorage extends NativeSessionStorage
|
|
|
public function sessionGC($lifetime)
|
|
|
{
|
|
|
// get table/column
|
|
|
- $dbTable = $this->options['db_table'];
|
|
|
- $dbTimeCol = $this->options['db_time_col'];
|
|
|
+ $dbTable = $this->dbOptions['db_table'];
|
|
|
+ $dbTimeCol = $this->dbOptions['db_time_col'];
|
|
|
|
|
|
// delete the record associated with this id
|
|
|
$sql = 'DELETE FROM '.$dbTable.' WHERE '.$dbTimeCol.' < '.(time() - $lifetime);
|
|
@@ -154,10 +163,10 @@ class PdoSessionStorage extends NativeSessionStorage
|
|
|
public function sessionRead($id)
|
|
|
{
|
|
|
// get table/columns
|
|
|
- $dbTable = $this->options['db_table'];
|
|
|
- $dbDataCol = $this->options['db_data_col'];
|
|
|
- $dbIdCol = $this->options['db_id_col'];
|
|
|
- $dbTimeCol = $this->options['db_time_col'];
|
|
|
+ $dbTable = $this->dbOptions['db_table'];
|
|
|
+ $dbDataCol = $this->dbOptions['db_data_col'];
|
|
|
+ $dbIdCol = $this->dbOptions['db_id_col'];
|
|
|
+ $dbTimeCol = $this->dbOptions['db_time_col'];
|
|
|
|
|
|
try {
|
|
|
$sql = 'SELECT '.$dbDataCol.' FROM '.$dbTable.' WHERE '.$dbIdCol.'=?';
|
|
@@ -196,10 +205,10 @@ class PdoSessionStorage extends NativeSessionStorage
|
|
|
public function sessionWrite($id, $data)
|
|
|
{
|
|
|
// get table/column
|
|
|
- $dbTable = $this->options['db_table'];
|
|
|
- $dbDataCol = $this->options['db_data_col'];
|
|
|
- $dbIdCol = $this->options['db_id_col'];
|
|
|
- $dbTimeCol = $this->options['db_time_col'];
|
|
|
+ $dbTable = $this->dbOptions['db_table'];
|
|
|
+ $dbDataCol = $this->dbOptions['db_data_col'];
|
|
|
+ $dbIdCol = $this->dbOptions['db_id_col'];
|
|
|
+ $dbTimeCol = $this->dbOptions['db_time_col'];
|
|
|
|
|
|
$sql = 'UPDATE '.$dbTable.' SET '.$dbDataCol.' = ?, '.$dbTimeCol.' = '.time().' WHERE '.$dbIdCol.'= ?';
|
|
|
|
|
@@ -230,10 +239,10 @@ class PdoSessionStorage extends NativeSessionStorage
|
|
|
private function createNewSession($id, $data = '')
|
|
|
{
|
|
|
// get table/column
|
|
|
- $dbTable = $this->options['db_table'];
|
|
|
- $dbDataCol = $this->options['db_data_col'];
|
|
|
- $dbIdCol = $this->options['db_id_col'];
|
|
|
- $dbTimeCol = $this->options['db_time_col'];
|
|
|
+ $dbTable = $this->dbOptions['db_table'];
|
|
|
+ $dbDataCol = $this->dbOptions['db_data_col'];
|
|
|
+ $dbIdCol = $this->dbOptions['db_id_col'];
|
|
|
+ $dbTimeCol = $this->dbOptions['db_time_col'];
|
|
|
|
|
|
$sql = 'INSERT INTO '.$dbTable.'('.$dbIdCol.', '.$dbDataCol.', '.$dbTimeCol.') VALUES (?, ?, ?)';
|
|
|
|