database.php 2 KB
Newer Older
1
<?php namespace Laravel\Session\Drivers;
2

3
use Laravel\Config;
4 5
use Laravel\Database\Connection;

6
class Database extends Driver implements Sweeper {
7 8 9 10 11 12

	/**
	 * The database connection.
	 *
	 * @var Connection
	 */
13
	private $connection;
14 15 16 17 18 19 20

	/**
	 * Create a new database session driver.
	 *
	 * @param  Connection  $connection
	 * @return void
	 */
21
	public function __construct(Connection $connection)
22 23 24 25 26
	{
		$this->connection = $connection;
	}

	/**
27
	 * Load a session from storage by a given ID.
28
	 *
29
	 * If no session is found for the ID, null will be returned.
30
	 *
31 32 33
	 * @param  string  $id
	 * @return array
	 */
34
	public function load($id)
35 36 37 38 39 40 41 42 43 44 45 46 47 48
	{
		$session = $this->table()->find($id);

		if ( ! is_null($session))
		{
			return array(
				'id'            => $session->id,
				'last_activity' => $session->last_activity,
				'data'          => unserialize($session->data)
			);
		}
	}

	/**
49
	 * Save a given session to storage.
50
	 *
51
	 * @param  array  $session
52
	 * @param  array  $config
53
	 * @param  bool   $exists
54 55
	 * @return void
	 */
56
	public function save($session, $config, $exists)
57
	{
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
		if ($exists)
		{
			$this->table()->where('id', '=', $session['id'])->update(array(
				'last_activity' => $session['last_activity'],
				'data'          => serialize($session['data']),
			));
		}
		else
		{
			$this->table()->insert(array(
				'id'            => $session['id'], 
				'last_activity' => $session['last_activity'], 
				'data'          => serialize($session['data'])
			));			
		}
73 74 75
	}

	/**
76
	 * Delete a session from storage by a given ID.
77
	 *
78
	 * @param  string  $id
79 80
	 * @return void
	 */
81
	public function delete($id)
82
	{
83
		$this->table()->delete($id);
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
	}

	/**
	 * Delete all expired sessions from persistant storage.
	 *
	 * @param  int   $expiration
	 * @return void
	 */
	public function sweep($expiration)
	{
		$this->table()->where('last_activity', '<', $expiration)->delete();
	}

	/**
	 * Get a session database query.
	 *
	 * @return Query
	 */
102
	private function table()
103
	{
104
		return $this->connection->table(Config::get('session.table'));		
105 106 107
	}
	
}