Browse Source

fix session related bugs.

Taylor Otwell 13 years ago
parent
commit
429c9cee84

+ 1 - 1
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);
 	}),
 
 	/*

+ 17 - 14
laravel/laravel.php

@@ -113,10 +113,25 @@ require SYS_PATH.'routing/route'.EXT;
 require SYS_PATH.'routing/router'.EXT;
 require SYS_PATH.'routing/handler'.EXT;
 
+// --------------------------------------------------------------
+// Initialize the request instance for the request.
+// --------------------------------------------------------------
+$request = new Request($_SERVER);
+
+IoC::container()->instance('laravel.request', $request);
+
+// --------------------------------------------------------------
+// Hydrate the input for the current 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(Cookie::get('laravel_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.
@@ -128,18 +143,6 @@ if (count(Config::get('application.packages')) > 0)
 	Package::load(Config::get('application.packages'));
 }
 
-// --------------------------------------------------------------
-// Initialize the request instance for the request.
-// --------------------------------------------------------------
-$request = new Request($_SERVER);
-
-IoC::container()->instance('laravel.request', $request);
-
-// --------------------------------------------------------------
-// Hydrate the input for the current request.
-// --------------------------------------------------------------
-$request->input = new Input($request->method(), $request->is_spoofed(), $_GET, $_POST, $_FILES, new Cookie($_COOKIE));
-
 // --------------------------------------------------------------
 // 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)
 	{

+ 3 - 3
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;

+ 11 - 5
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);
 		}
 	}
 

+ 2 - 1
laravel/session/manager.php

@@ -1,5 +1,6 @@
 <?php namespace Laravel\Session;
 
+use Laravel\IoC;
 use Laravel\Config;
 
 class Manager {
@@ -26,7 +27,7 @@ class Manager {
 		{
 			$driver = Config::get('session.driver');
 
-			if (in_array($driver, array('cookie', 'file', 'database', 'memcached')))
+			if (in_array($driver, array('cookie', 'file', 'database', 'apc', 'memcached')))
 			{
 				return static::$driver = IoC::container()->resolve('laravel.session.'.$driver);
 			}