database.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php namespace Laravel\Session\Drivers;
  2. use Laravel\Config;
  3. use Laravel\Database\Connection;
  4. class Database extends Driver implements Sweeper {
  5. /**
  6. * The database connection.
  7. *
  8. * @var Connection
  9. */
  10. private $connection;
  11. /**
  12. * Create a new database session driver.
  13. *
  14. * @param Connection $connection
  15. * @return void
  16. */
  17. public function __construct(Connection $connection)
  18. {
  19. $this->connection = $connection;
  20. }
  21. /**
  22. * Load a session from storage by a given ID.
  23. *
  24. * If no session is found for the ID, null will be returned.
  25. *
  26. * @param string $id
  27. * @return array
  28. */
  29. public function load($id)
  30. {
  31. $session = $this->table()->find($id);
  32. if ( ! is_null($session))
  33. {
  34. return array(
  35. 'id' => $session->id,
  36. 'last_activity' => $session->last_activity,
  37. 'data' => unserialize($session->data)
  38. );
  39. }
  40. }
  41. /**
  42. * Save a given session to storage.
  43. *
  44. * @param array $session
  45. * @param array $config
  46. * @param bool $exists
  47. * @return void
  48. */
  49. public function save($session, $config, $exists)
  50. {
  51. if ($exists)
  52. {
  53. $this->table()->where('id', '=', $session['id'])->update(array(
  54. 'last_activity' => $session['last_activity'],
  55. 'data' => serialize($session['data']),
  56. ));
  57. }
  58. else
  59. {
  60. $this->table()->insert(array(
  61. 'id' => $session['id'],
  62. 'last_activity' => $session['last_activity'],
  63. 'data' => serialize($session['data'])
  64. ));
  65. }
  66. }
  67. /**
  68. * Delete a session from storage by a given ID.
  69. *
  70. * @param string $id
  71. * @return void
  72. */
  73. public function delete($id)
  74. {
  75. $this->table()->delete($id);
  76. }
  77. /**
  78. * Delete all expired sessions from persistant storage.
  79. *
  80. * @param int $expiration
  81. * @return void
  82. */
  83. public function sweep($expiration)
  84. {
  85. $this->table()->where('last_activity', '<', $expiration)->delete();
  86. }
  87. /**
  88. * Get a session database query.
  89. *
  90. * @return Query
  91. */
  92. private function table()
  93. {
  94. return $this->connection->table(Config::get('session.table'));
  95. }
  96. }