From 429c9cee84caea9df3c2a02471a507ee8c09294a Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Fri, 26 Aug 2011 00:01:08 -0500 Subject: [PATCH] fix session related bugs. --- laravel/config/container.php | 2 +- laravel/laravel.php | 35 +++++++++++++++++++---------------- laravel/session/cookie.php | 6 +++--- laravel/session/driver.php | 16 +++++++++++----- laravel/session/manager.php | 3 ++- 5 files changed, 36 insertions(+), 26 deletions(-) diff --git a/laravel/config/container.php b/laravel/config/container.php index e9b5e6d0..e9404605 100644 --- a/laravel/config/container.php +++ b/laravel/config/container.php @@ -77,7 +77,7 @@ return array( 'laravel.session.cookie' => array('resolver' => function($container) { - return new Session\Cookie(new Crypter, $container->resolve('laravel.request')->input->cookies); + return new Session\Cookie(Security\Crypter::make(), $container->resolve('laravel.request')->input->cookies); }), /* diff --git a/laravel/laravel.php b/laravel/laravel.php index 349d8ac8..3032a8c6 100644 --- a/laravel/laravel.php +++ b/laravel/laravel.php @@ -113,21 +113,6 @@ require SYS_PATH.'routing/route'.EXT; require SYS_PATH.'routing/router'.EXT; require SYS_PATH.'routing/handler'.EXT; -// -------------------------------------------------------------- -// Load the session. -// -------------------------------------------------------------- -if (Config::get('session.driver') != '') Session\Manager::driver()->start(Cookie::get('laravel_session')); - -// -------------------------------------------------------------- -// Load the packages that are in the auto-loaded packages array. -// -------------------------------------------------------------- -if (count(Config::get('application.packages')) > 0) -{ - require SYS_PATH.'package'.EXT; - - Package::load(Config::get('application.packages')); -} - // -------------------------------------------------------------- // Initialize the request instance for the request. // -------------------------------------------------------------- @@ -140,6 +125,24 @@ IoC::container()->instance('laravel.request', $request); // -------------------------------------------------------------- $request->input = new Input($request->method(), $request->is_spoofed(), $_GET, $_POST, $_FILES, new Cookie($_COOKIE)); +// -------------------------------------------------------------- +// Load the session. +// -------------------------------------------------------------- +if (Config::get('session.driver') != '') +{ + Session\Manager::driver()->start($request->input->cookies->get('laravel_session')); +} + +// -------------------------------------------------------------- +// Load the packages that are in the auto-loaded packages array. +// -------------------------------------------------------------- +if (count(Config::get('application.packages')) > 0) +{ + require SYS_PATH.'package'.EXT; + + Package::load(Config::get('application.packages')); +} + // -------------------------------------------------------------- // Route the request and get the response from the route. // -------------------------------------------------------------- @@ -161,7 +164,7 @@ if (Config::get('session.driver') != '') $driver->flash('laravel_old_input', $request->input->get()); - $driver->close(); + $driver->close($request->input->cookies); if ($driver instanceof Session\Sweeper and mt_rand(1, 100) <= 2) { diff --git a/laravel/session/cookie.php b/laravel/session/cookie.php index 5fa059b3..01997912 100644 --- a/laravel/session/cookie.php +++ b/laravel/session/cookie.php @@ -22,11 +22,11 @@ class Cookie extends Driver { /** * Create a new Cookie session driver instance. * - * @param Crypter $crypter - * @param Cookie $cookie + * @param Crypter $crypter + * @param Laravel\Cookie $cookie * @return void */ - public function __construct(Crypter $crypter, Cookie $cookie) + public function __construct(Crypter $crypter, \Laravel\Cookie $cookie) { $this->cookie = $cookie; $this->crypter = $crypter; diff --git a/laravel/session/driver.php b/laravel/session/driver.php index 928523ee..857402d1 100644 --- a/laravel/session/driver.php +++ b/laravel/session/driver.php @@ -188,15 +188,16 @@ abstract class Driver { * The session will be stored in persistant storage and the session cookie will be * session cookie will be sent to the browser. * + * @param Laravel\Cookie $cookie * @return void */ - public function close() + public function close(\Laravel\Cookie $cookie) { $this->age_flash(); $this->save(); - $this->write_cookie(); + $this->write_cookie($cookie); } /** @@ -225,15 +226,20 @@ abstract class Driver { /** * Write the session cookie. * + * @param Laravel\Cookie $cookie * @return void */ - protected function write_cookie() + protected function write_cookie(\Laravel\Cookie $cookie) { if ( ! headers_sent()) { - $minutes = (Config::get('session.expire_on_close')) ? 0 : Config::get('session.lifetime'); + $config = Config::get('session'); - Cookie::put('laravel_session', static::$session['id'], $minutes, Config::get('session.path'), Config::get('session.domain'), Config::get('session.https'), Config::get('http_only')); + extract($config); + + $minutes = ($expire_on_close) ? 0 : $lifetime; + + $cookie->put('laravel_session', $this->session['id'], $minutes, $path, $domain, $https, $http_only); } } diff --git a/laravel/session/manager.php b/laravel/session/manager.php index 1a0c2abe..4bc03977 100644 --- a/laravel/session/manager.php +++ b/laravel/session/manager.php @@ -1,5 +1,6 @@ resolve('laravel.session.'.$driver); }