Extracted cookie database saves to shutdown and cleaned up code

Signed-off-by: dchill42 <dchill42@gmail.com>
diff --git a/system/libraries/Session/Session.php b/system/libraries/Session/Session.php
index 1f24456..1195ed9 100755
--- a/system/libraries/Session/Session.php
+++ b/system/libraries/Session/Session.php
@@ -42,6 +42,7 @@
 	public $params = array();
 	protected $current = null;
 	protected $userdata = array();
+	protected $loaded = array();
 
 	const FLASHDATA_KEY = 'flash';
 	const FLASHDATA_NEW = ':new:';
@@ -112,6 +113,22 @@
 	}
 
 	/**
+	 * CI_Session destructor
+	 *
+	 * The destructor calls shutdown() on each loaded driver
+	 */
+	public function __destruct()
+	{
+		// Call shutdown for each loaded driver
+		foreach ($this->loaded as $driver)
+		{
+			$this->$driver->shutdown();
+		}
+
+		log_message('debug', 'CI_Session Class Shutdown');
+	}
+
+	/**
 	 * Loads session storage driver
 	 *
 	 * @param	string	Driver classname
@@ -122,6 +139,14 @@
 		// Save reference to most recently loaded driver as library default and sync userdata
 		$this->current = parent::load_driver($driver);
 		$this->userdata =& $this->current->get_userdata();
+
+		// Mark driver as loaded
+		if (!in_array($driver, $this->loaded))
+		{
+			$this->loaded[] = $driver;
+		}
+
+		// Return driver object
 		return $this->current;
 	}
 
@@ -582,6 +607,16 @@
 	}
 
 	/**
+	 * Shut down driver
+	 *
+	 * @return	void
+	 */
+	public function shutdown()
+	{
+		// Overload this method to implement shutdown
+	}
+
+	/**
 	 * Save the session data
 	 *
 	 * Data in the array has changed - perform any storage synchronization necessary