Commit 32f38320 authored by Taylor Otwell's avatar Taylor Otwell

restructured session driver interfaces and added cookie session driver.

parent 3583bc3b
...@@ -12,7 +12,7 @@ return array( ...@@ -12,7 +12,7 @@ return array(
| Since HTTP is stateless, sessions are used to maintain "state" across | Since HTTP is stateless, sessions are used to maintain "state" across
| multiple requests from the same user of your application. | multiple requests from the same user of your application.
| |
| Supported Drivers: 'file', 'db', 'memcached', 'apc'. | Supported Drivers: 'cookie', 'file', 'db', 'memcached', 'apc'.
| |
*/ */
......
...@@ -27,6 +27,10 @@ class Session { ...@@ -27,6 +27,10 @@ class Session {
{ {
switch (Config::get('session.driver')) switch (Config::get('session.driver'))
{ {
case 'cookie':
static::$driver = new Session\Cookie;
break;
case 'file': case 'file':
static::$driver = new Session\File; static::$driver = new Session\File;
break; break;
...@@ -203,8 +207,8 @@ class Session { ...@@ -203,8 +207,8 @@ class Session {
Cookie::put('laravel_session', static::$session['id'], $minutes, $config['path'], $config['domain'], $config['https'], $config['http_only']); Cookie::put('laravel_session', static::$session['id'], $minutes, $config['path'], $config['domain'], $config['https'], $config['http_only']);
} }
// 2% chance of performing session garbage collection... // 2% chance of performing session garbage collection on any given request...
if (mt_rand(1, 100) <= 2) if (mt_rand(1, 100) <= 2 and static::driver() instanceof Session\Sweeper)
{ {
static::driver()->sweep(time() - ($config['lifetime'] * 60)); static::driver()->sweep(time() - ($config['lifetime'] * 60));
} }
......
...@@ -37,15 +37,4 @@ class APC implements Driver { ...@@ -37,15 +37,4 @@ class APC implements Driver {
Cache::driver('apc')->forget($id); Cache::driver('apc')->forget($id);
} }
/**
* Delete all expired sessions.
*
* @param int $expiration
* @return void
*/
public function sweep($expiration)
{
// APC sessions will expire automatically.
}
} }
\ No newline at end of file
<?php namespace System\Session;
use System\Crypt;
use System\Config;
class Cookie implements Driver {
public function __construct()
{
if (Config::get('application.key') == '')
{
throw new \Exception("You must set an application key before using the Cookie session driver.");
}
}
/**
* Load a session by ID.
*
* @param string $id
* @return array
*/
public function load($id)
{
if (\System\Cookie::has('session_payload'))
{
return unserialize(Crypt::decrypt(\System\Cookie::get('session_payload')));
}
}
/**
* Save a session.
*
* @param array $session
* @return void
*/
public function save($session)
{
$c = \System\Config::get('session');
\System\Cookie::put('session_payload', Crypt::encrypt(serialize($session)), $c['lifetime'], $c['path'], $c['domain'], $c['https'], $c['http_only']);
}
/**
* Delete a session by ID.
*
* @param string $id
* @return void
*/
public function delete($id)
{
\System\Cookie::forget('session_payload');
}
}
\ No newline at end of file
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
use System\Config; use System\Config;
use System\DB\Manager; use System\DB\Manager;
class DB implements Driver { class DB implements Driver, Sweeper {
/** /**
* Load a session by ID. * Load a session by ID.
......
...@@ -26,12 +26,4 @@ interface Driver { ...@@ -26,12 +26,4 @@ interface Driver {
*/ */
public function delete($id); public function delete($id);
/**
* Delete all expired sessions.
*
* @param int $expiration
* @return void
*/
public function sweep($expiration);
} }
\ No newline at end of file
<?php namespace System\Session; <?php namespace System\Session;
class File implements Driver { class File implements Driver, Sweeper {
/** /**
* Load a session by ID. * Load a session by ID.
......
...@@ -38,15 +38,4 @@ class Memcached implements Driver { ...@@ -38,15 +38,4 @@ class Memcached implements Driver {
Cache::driver('memcached')->forget($id); Cache::driver('memcached')->forget($id);
} }
/**
* Delete all expired sessions.
*
* @param int $expiration
* @return void
*/
public function sweep($expiration)
{
// Memcached sessions will expire automatically.
}
} }
\ No newline at end of file
<?php namespace System\Session;
interface Sweeper {
/**
* Delete all expired sessions.
*
* @param int $expiration
* @return void
*/
public function sweep($expiration);
}
\ 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