Commit 8a6418a9 by Alexander Mohorev

refactoring Session component

parent c56bf509
...@@ -91,28 +91,22 @@ class Session extends \yii\web\Session ...@@ -91,28 +91,22 @@ class Session extends \yii\web\Session
parent::regenerateID(false); parent::regenerateID(false);
$newID = session_id(); $newID = session_id();
$query = new Query; $collection = $this->db->getCollection($this->sessionCollection);
$row = $query->from($this->sessionCollection) $row = $collection->findOne(['id' => $oldID]);
->where(['id' => $oldID]) if ($row !== null) {
->one($this->db);
if ($row !== false) {
if ($deleteOldSession) { if ($deleteOldSession) {
$this->db->getCollection($this->sessionCollection) $collection->update(['id' => $oldID], ['id' => $newID]);
->update(['_id' => $row['_id']], ['id' => $newID]);
} else { } else {
unset($row['_id']); unset($row['_id']);
$row['id'] = $newID; $row['id'] = $newID;
$this->db->getCollection($this->sessionCollection) $collection->insert($row);
->insert($row);
} }
} else { } else {
// shouldn't reach here normally // shouldn't reach here normally
$this->db->getCollection($this->sessionCollection) $collection->insert([
->insert([ 'id' => $newID,
'id' => $newID, 'expire' => time() + $this->getTimeout()
'expire' => time() + $this->getTimeout(), ]);
'data' => '',
]);
} }
} }
...@@ -124,15 +118,15 @@ class Session extends \yii\web\Session ...@@ -124,15 +118,15 @@ class Session extends \yii\web\Session
*/ */
public function readSession($id) public function readSession($id)
{ {
$query = new Query; $collection = $this->db->getCollection($this->sessionCollection);
$row = $query->select(['data']) $doc = $collection->findOne(
->from($this->sessionCollection) [
->where([ 'id' => $id,
'expire' => ['$gt' => time()], 'expire' => ['$gt' => time()],
'id' => $id ],
]) ['data' => 1, '_id' => 0]
->one($this->db); );
return $row === false ? '' : $row['data']; return isset($doc['data']) ? $doc['data'] : '';
} }
/** /**
...@@ -147,23 +141,15 @@ class Session extends \yii\web\Session ...@@ -147,23 +141,15 @@ class Session extends \yii\web\Session
// exception must be caught in session write handler // exception must be caught in session write handler
// http://us.php.net/manual/en/function.session-set-save-handler.php // http://us.php.net/manual/en/function.session-set-save-handler.php
try { try {
$expire = time() + $this->getTimeout(); $this->db->getCollection($this->sessionCollection)->update(
$query = new Query; ['id' => $id],
$exists = $query->select(['id']) [
->from($this->sessionCollection) 'id' => $id,
->where(['id' => $id]) 'data' => $data,
->one($this->db); 'expire' => time() + $this->getTimeout(),
if ($exists === false) { ],
$this->db->getCollection($this->sessionCollection) ['upsert' => true]
->insert([ );
'id' => $id,
'data' => $data,
'expire' => $expire,
]);
} else {
$this->db->getCollection($this->sessionCollection)
->update(['id' => $id], ['data' => $data, 'expire' => $expire]);
}
} catch (\Exception $e) { } catch (\Exception $e) {
if (YII_DEBUG) { if (YII_DEBUG) {
echo $e->getMessage(); echo $e->getMessage();
...@@ -182,8 +168,10 @@ class Session extends \yii\web\Session ...@@ -182,8 +168,10 @@ class Session extends \yii\web\Session
*/ */
public function destroySession($id) public function destroySession($id)
{ {
$this->db->getCollection($this->sessionCollection) $this->db->getCollection($this->sessionCollection)->remove(
->remove(['id' => $id]); ['id' => $id],
['justOne' => true]
);
return true; return true;
} }
...@@ -195,10 +183,10 @@ class Session extends \yii\web\Session ...@@ -195,10 +183,10 @@ class Session extends \yii\web\Session
*/ */
public function gcSession($maxLifetime) public function gcSession($maxLifetime)
{ {
$this->db->getCollection($this->sessionCollection) $this->db->getCollection($this->sessionCollection)->remove(
->remove([ ['expire' => ['$lt' => time()]],
'expire' => ['$lt' => time()] ['justOne' => false]
]); );
return true; return true;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment