<?xml version="1.0" encoding="utf-8"?>	
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>CodeIgniter Wiki</title>
    <link>http://codeigniter.com/wiki/</link>
    <description>CodeIgniter Wiki</description>
    <dc:language>en</dc:language>
    <dc:creator>forums@codeigniter.com</dc:creator>
    <dc:rights>Copyright 2007</dc:rights>
    <dc:date>2008-07-20T04:04:14-06:00</dc:date>
    <admin:generatorAgent rdf:resource="http://www.pmachine.com/" />
    

    <item>
      <title>Modular Extensions &#45; HMVC</title>
      <link>http://codeigniter.com/wiki/Modular_Extensions_&#45;_HMVC/</link>
      <guid>http://codeigniter.com/wiki/Modular_Extensions_&#45;_HMVC/</guid>
      <description><![CDATA[<p><a href="http://codeigniter.com/wiki/Category:Library/" title="Category:Library">Category:Library</a> | <a href="http://codeigniter.com/wiki/Category:Library::Community/" title="Category:Library::Community">Category:Library -&gt; Community</a> | <a href="http://codeigniter.com/wiki/Category:Library::Extensions/" title="Category:Library::Extensions">Category:Library -&gt; Extensions</a> | <a href="http://codeigniter.com/wiki/Category:Library::HMVC/" title="Category:Library::HMVC">Category:Library -&gt; HMVC</a>
<br />
</p><h3>Modular Extensions - HMVC</h3><p>
Modular Extensions makes CodeIgniter modular. Modules are groups of independent CI components (typically, model, controller, view arranged in one application sub-directory) that can be dropped into CodeIgniter applications. HMVC stands for Hierarchical Model View Controller, which is a fancy way of saying nested modules!)
<br />
 
<br />
Module Controllers can be used as normal Controllers or HMVC Controllers and they can be used to help you build view partials.
</p>
<h3>Modular Extensions installation</h3><p>
 1) Start with a clean CI install.
<br />
 2) Set $config[&#8217;base_url&#8217;] correctly for your installation.
<br />
 3) Access the URL domain/subdir/index.php/welcome =&gt; shows Welcome to CodeIgniter
<br />
 4) Drop Modular Extensions libraries into application/libraries and application/helpers directories as specified.
<br />
 5) Access the URL domain/subdir/index.php/welcome =&gt; shows Welcome to CodeIgniter 
<br />
 6) Create module directory structure application/modules/welcome/controllers.
<br />
 7) Move controller application/controllers/welcome.php to application/modules/welcome/controllers/welcome.php.
<br />
 8) Access the URL domain/subdir/index.php/welcome =&gt; shows Welcome to CodeIgniter
<br />
 9) Create directory application/modules/welcome/views.
<br />
10) Move view application/views/welcome_message.php to application/modules/welcome/views/welcome_message.php
<br />
11) Access the URL domain/subdir/index.php/welcome =&gt; shows Welcome to CodeIgniter 
</p>
<p>
You now have a running Modular Extensions installation.
</p>
<p>
<b>Installation Guide Hints:</b>
<br />
-Steps 1-3 tell you how to get a standard CI install working - if you have a clean/tested CI install, skip to step 4.
<br />
-Steps 4-5 show that normal CI still works after installing ME - it shouldn&#8217;t interfere with the normal CI setup.
<br />
-Steps 6-8 show ME working alongside CI - controller moved to the ME &#8220;welcome&#8221; module, the view file remains in the CI application/views directory - ME can find module resources in several places, including the application directory.
<br />
-Steps 9-11 show ME working with both controller and view in &#8220;welcome&#8221; module - there should be no files in the application/controllers or application/views directories.
</p>
<h3>FAQ</h3>
<p>
<b>Q. What are modules, why should I use them? </b>
</p>
<p>
A. <a href="http://en.wikipedia.org/wiki/Module">http://en.wikipedia.org/wiki/Module</a> 
</p>
<p>
<b>Q. What is Modular HMVC, why should I use it? </b>
</p>
<p>
A. Modular HMVC = Multiple MVC triads 
</p>
<p>
This is most useful when you need to load a view and its data within a view. Think about adding a shopping cart to a page. The shopping cart needs its own controller which may call a model to get cart data. Then the controller needs to load the data into a view. So instead of the main controller handling the page and the shopping cart, the shopping cart MVC can be loaded directly in the page. The main controller doesn’t need to know about it, and is totally isolated from it. 
</p>
<p>
In CI we can’t call more than 1 controller per request. Therefore, to achieve HMVC, we have to simulate controllers. It can be done with libraries, or with this “Modular Extensions HMVC” contribution. 
</p>
<p>
The differences between using a library and a “Modular HMVC” HMVC class is: 
<br />
1) No need to get and use the CI instance within an HMVC class 
<br />
2) HMVC classes are stored in a modules directory as opposed to the libraries directory. 
</p>
<p>
<b>Q. Is Modular Extensions HMVC the same as Matchbox? </b>
</p>
<p>
A. Yes and No. Like Matchbox, ME makes modules &#8220;portable&#8221; to other installations. For example, if you make a nice self-contained model-controller-view set of files you can bring that MVC into another project by copying just one folder - everything is in one place instead of spread around model, view and controller folders.
</p>
<p>
ME is different from Matchbox because you can nest those modules. So, from another controller, you can get some of the nice output from the original, tidy MVC set without calling a controller via URI (i.e., another http call using file_get_contents&#40;&#41; or curl). You can get controller output without having to go out through the http interface again.
</p>
<p>
Modular HMVC means modular MVC triads. Matchbox and Modular Extensions allows related controllers, models, libraries, views, etc. to be grouped together in module directories and used like a mini application. But, ME goes one step further and allows those modules to &#8220;talk&#8221; to each other.
</p>
<p>
<span style="color:red;"><b>Note:</b></span>
<br />
You can find more FAQ at the wiki page <a href="http://codeigniter.com/wiki/Modular_Extensions_-_FAQ/" title="Modular_Extensions_-_FAQ">Modular Extensions - FAQ</a>
</p>
<h3>Features:</h3>
<p>
All controllers can contain an $autoload class variable, which holds an array of items to load prior to running the constructor. This can be used instead of module/config/autoload.php, however using the file takes precedence over the class variable. 
<br />
 
<br />
Modules::run() output is buffered, so any data returned or output directly from the controller is caught and returned to the caller. In particular, $this-&gt;load-&gt;view() can be used as you would in a normal controller, without the need for return. 
<br />
 
<br />
Controllers can be loaded as class variables of other controllers using $this-&gt;load-&gt;module(’module/controller’); or simply 
<br />
$this-&gt;load-&gt;module(’module’); if the controller name matches the module name. 
<br />
 
<br />
Any loaded module controller can then be used like a library, ie: $this-&gt;module_controller-&gt;do_stuff(), but it has access to its own models and libraries independently from the caller. 
<br />
 
<br />
Module controllers can have independent methods, located in a module/methods directory, these methods act as libraries extending their parent controller and have access to the parent controller features. 
<br />
 
<br />
Loading a method is achieved from a module controller by using $this-&gt;load-&gt;method(’method’); or from a view by using modules:run(), if the method name is not defined in the controller then the method subclass will be loaded and its own index() method will be called, however if the controller actually has the method, it will be called as normal. 
<br />
 
<br />
Controllers also have a instance() method that can be used instead of get_instance() in libraries and helpers etc. 
<br />
ie: $ci = controller::instance(); 
<br />
 
<br />
Of course all module controllers are accessible from the URL via module/controller/method or simply module/method if the module and controller names match. 
<br />
 
<br />
However if you add the _remap() method to your controllers you can prevent unwanted access to them and redirect or flag an error as you like. 
<br />
 
<br />
</p><h3>Download</h3><p>
Download version 4.0: <a href="http://codeigniter.com/wiki/File:modular_extensions_4032.zip/" title="File:modular_extensions_4032.zip" class="noArticle">File:modular extensions 4032.zip</a> (final)
<br />
Download new version 4.2: <a href="http://codeigniter.com/wiki/File:modular_extensions_4206.zip/" title="File:modular_extensions_4206.zip" class="noArticle">File:modular extensions 4206.zip</a>
<br />
 
<br />
<b>Note: Version 4.2 is not backward compatible with version 4.0</b>
<br />
 
<br />
</p><h3>View Partials</h3><p>
Your modules output will be buffered by the modules::run() function and the explicit return used in earlier versions is no longer required.
<br />
 
<br />
Using a Module as a view partial from within a view is as easy as writing:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #0000BB">modules</span><span style="color: #007700">::</span><span style="color: #0000BB">run</span><span style="color: #007700">(</span><span style="color: #DD0000">'module'</span><span style="color: #007700">, </span><span style="color: #0000BB">$data</span><span style="color: #007700">, </span><span style="color: #DD0000">'method'</span><span style="color: #007700">) </span><span style="color: #0000BB">?&gt;</span>
</code></div><p> 
<br />
The $data and &#8216;method&#8217; above are optional. The default method is index.
<br />
 
<br />
</p><h3>Tips and Tricks:</h3><p>
<b>Using language files</b>
<br />
<span style="color:red;">application/modules/home/language/home_lang.php</span>
<br />
Put this in your controller-file:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">language</span><span style="color: #007700">(</span><span style="color: #DD0000">'home'</span><span style="color: #007700">);</span>
</code></div><p>
</p>
<p>
On your view-file:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lang</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">line</span><span style="color: #007700">(</span><span style="color: #DD0000">'name'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</code></div><p>
</p>
<p>
If you want to specify the language of the language-file you are going to use, you can alter the first line in something like:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">language</span><span style="color: #007700">(</span><span style="color: #DD0000">'home'</span><span style="color: #007700">,</span><span style="color: #DD0000">'english'</span><span style="color: #007700">);</span>
</code></div><p>
</p>
<p>
<b>Using debug</b>
<br />
The debug_helper has two debug methods you might like to look at.
<br />
 
<br />
debug($any_object); will display the $any_object and list its loaded libraries, using $this will display the current module.
<br />
 
<br />
debug_in($any_object) or debug_in($any_array) will do a full dump on the subject.
<br />
 
<br />
<span style="color:red;"><b>NOTE:</b></span> 
<br />
If you debug_in() the CodeIgniter Core ($CI), you will get a page full of recursive arrays. This is not an issue because most of the recursions are only references back into $CI core objects.
<br />
 
<br />
</p><h3>Issues</h3><p>
Do not use the <b>MY_Controller</b> extension in your application/libraries directory. This will cause CodeIgniter to bypass loading Modular Extensions and modules will not function. If you need to run methods in a base controller define them in another module controller and use the controller autoload functionality.
<br />
 
<br />
MY_ prefixed resources are not loaded by ME when they are inside the module directory (e.g., MY_directory_helper.php is not loaded when it is in the modulename/helpers directory). This is because ME doesn’t check for MY_ extensions in modules. To get new functionality using helpers, plugins, models, etc&#8230; either make a new named file and load that resource or put your MY_ prefixed resource up in the requisite application directory (helpers for a MY_ helper, libraries for a MY_ library, etc...).
</p>
<p>
<span style="color:red;"><b>NOTE:</b></span>
<br />
Do you get notices or error-messages? You might want to have a look at the wiki page 
<br />
<a href="http://codeigniter.com/wiki/Modular_Extensions_-_Notices_and_errors/" title="Modular_Extensions_-_Notices_and_errors">Modular Extensions - Notices and errors</a> as well.
</p>]]></description>
      <dc:subject>Modular Extensions &#45; HMVC</dc:subject>
      <dc:date>2008-07-20T04:04:14-06:00</dc:date>
    </item>

    <item>
      <title>Masterpages for CodeIgniter</title>
      <link>http://codeigniter.com/wiki/Masterpages_for_CodeIgniter/</link>
      <guid>http://codeigniter.com/wiki/Masterpages_for_CodeIgniter/</guid>
      <description><![CDATA[<p><a href="http://codeigniter.com/wiki/Category:Library:Views/" title="Category:Library:Views">Category:Library:Views</a> <a href="http://codeigniter.com/wiki/Category:Library:Community/" title="Category:Library:Community">Category:Library:Community</a>
</p>
<p>
Note: This is a PHP5 library.
</p>
<p>
application/libraries/MasterPage.php
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">&lt;?php </span><span style="color: #007700">if ( ! </span><span style="color: #0000BB">defined </span><span style="color: #007700">( </span><span style="color: #DD0000">'BASEPATH' </span><span style="color: #007700">) ) exit ( </span><span style="color: #DD0000">'No direct script access allowed.' </span><span style="color: #007700">);<br /></span><span style="color: #FF8000">/**<br /> * @author Kim Johansson &lt;hagbarddenstore@gmail.com&gt;<br /> * @copyright Copyright (c) 2008, Kim Johansson<br /> *<br /> * @version 0.0.1<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MasterPage &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;private $masterPage </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">private $contentPages </span><span style="color: #007700">= array ( );<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">private $ci </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @access public<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @param string $masterPage Optional file to use as MasterPage.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">public </span><span style="color: #007700">function </span><span style="color: #0000BB">__construct </span><span style="color: #007700">( </span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">= </span><span style="color: #DD0000">'' </span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">CI </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance </span><span style="color: #007700">( );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( ! empty ( </span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">) )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setMasterPage </span><span style="color: #007700">( </span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @access public<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @param string $masterPage File to use as MasterPage.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">public </span><span style="color: #007700">function </span><span style="color: #0000BB">setMasterPage </span><span style="color: #007700">( </span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// Check if the supplied masterpage exists.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if ( ! </span><span style="color: #0000BB">file_exists </span><span style="color: #007700">( </span><span style="color: #0000BB">APPPATH </span><span style="color: #007700">. </span><span style="color: #DD0000">'views/' </span><span style="color: #007700">. </span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">. </span><span style="color: #0000BB">EXT </span><span style="color: #007700">) )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">throw </span><span style="color: #007700">new </span><span style="color: #0000BB">Exception </span><span style="color: #007700">( </span><span style="color: #0000BB">APPPATH </span><span style="color: #007700">. </span><span style="color: #DD0000">'views/' </span><span style="color: #007700">. </span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">. </span><span style="color: #0000BB">EXT </span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">masterPage </span><span style="color: #007700">= </span><span style="color: #0000BB">$masterPage</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @access public<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @return string The current MasterPage.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">public </span><span style="color: #007700">function </span><span style="color: #0000BB">getMasterPage </span><span style="color: #007700">( ) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">masterPage</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @access public<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @param string $file The view file to add.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @param string $tag The tag in the MasterPage it should match.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @param mixed $content The content to be used in the view file.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">public </span><span style="color: #007700">function </span><span style="color: #0000BB">addContentPage </span><span style="color: #007700">( </span><span style="color: #0000BB">$file</span><span style="color: #007700">, </span><span style="color: #0000BB">$tag</span><span style="color: #007700">, </span><span style="color: #0000BB">$content </span><span style="color: #007700">= array ( ) ) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">contentPages&#91;$tag&#93; </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">CI</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">view </span><span style="color: #007700">( </span><span style="color: #0000BB">$file</span><span style="color: #007700">, </span><span style="color: #0000BB">$content</span><span style="color: #007700">, </span><span style="color: #0000BB">true </span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @access public<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @param array $content Optional content to be added to the MasterPage.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">public </span><span style="color: #007700">function </span><span style="color: #0000BB">show </span><span style="color: #007700">( </span><span style="color: #0000BB">$content </span><span style="color: #007700">= array ( ) ) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// Get the content of the MasterPage and replace all matching tags with their<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// respective view file content.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">CI</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">view </span><span style="color: #007700">( </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">masterPage</span><span style="color: #007700">, </span><span style="color: #0000BB">$content</span><span style="color: #007700">, </span><span style="color: #0000BB">true </span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ( </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">contentPages </span><span style="color: #007700">as </span><span style="color: #0000BB">$tag </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$content </span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$masterPage </span><span style="color: #007700">= </span><span style="color: #0000BB">str_replace </span><span style="color: #007700">( </span><span style="color: #DD0000">'&lt;mp:' </span><span style="color: #007700">. </span><span style="color: #0000BB">ucfirst </span><span style="color: #007700">( </span><span style="color: #0000BB">strtolower </span><span style="color: #007700">( </span><span style="color: #0000BB">$tag </span><span style="color: #007700">) ) . </span><span style="color: #DD0000">' /&gt;'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">, </span><span style="color: #0000BB">$masterPage </span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// Finally, print the data.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">echo </span><span style="color: #0000BB">$masterPage</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&#125;<br />?&gt;</span>
</code></div><p>
</p>
<p>
<b>Usage: </b>
</p>
<p>
In the controller:
<br />
</p><div class="codeblock"><code>
<span style="color: #007700">class </span><span style="color: #0000BB">MyController </span><span style="color: #007700">extends </span><span style="color: #0000BB">Controller &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;public </span><span style="color: #007700">function </span><span style="color: #0000BB">__construct </span><span style="color: #007700">( ) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent</span><span style="color: #007700">::</span><span style="color: #0000BB">__construct </span><span style="color: #007700">( );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">library </span><span style="color: #007700">( </span><span style="color: #DD0000">'masterpage' </span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public </span><span style="color: #007700">function </span><span style="color: #0000BB">index </span><span style="color: #007700">( ) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">masterpage</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setMasterPage </span><span style="color: #007700">( </span><span style="color: #DD0000">'masterpage_default' </span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// content_index is the view file to use.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// content is the tag in the masterpage file we want to replace.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">masterpage</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addContentPage </span><span style="color: #007700">( </span><span style="color: #DD0000">'content_index'</span><span style="color: #007700">, </span><span style="color: #DD0000">'content' </span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// Show the masterpage to the world!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">masterpage</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">show </span><span style="color: #007700">( );<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&#125;</span>
</code></div><p>
</p>
<p>
The masterpage:
<br />
application/views/masterpage_default.php
<br />
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br />&lt;!-- </span><span style="color: #0000BB">MasterPage tags must be capitalized </span><span style="color: #007700">and </span><span style="color: #0000BB">rest lowercase</span><span style="color: #007700">. --&gt;<br />&lt;</span><span style="color: #0000BB">mp</span><span style="color: #007700">:</span><span style="color: #0000BB">Content </span><span style="color: #007700">/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
The viewfile:
<br />
application/views/content_index.php
<br />
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">h1</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Hello world</span><span style="color: #007700">!&lt;/</span><span style="color: #0000BB">h1</span><span style="color: #007700">&gt;</span>
</code></div><p>
</p>
<p>
That&#8217;s about it, if you want to know more, just email me at hagbarddenstore _at_ gmail _dot_ com.
</p>]]></description>
      <dc:subject>Masterpages for CodeIgniter</dc:subject>
      <dc:date>2008-07-18T21:15:50-06:00</dc:date>
    </item>

    <item>
      <title>KNDB Session</title>
      <link>http://codeigniter.com/wiki/KNDB_Session/</link>
      <guid>http://codeigniter.com/wiki/KNDB_Session/</guid>
      <description><![CDATA[<p><a href="http://codeigniter.com/wiki/Category:Library::Session/" title="Category:Library::Session">Category:Library -&gt; Session</a> 
</p>
<p>
Native Session makes good use of PHP&#8217;s native session handling abilities, but it does not allow the use of a database for session storage. KNDB Session (which stands for Kirilisa&#8217;s Native Database session) is a hybrid which is based upon Native Session (with some notable changes) but allows use of databases via PHP&#8217;s ability to store sessions in a DB.
</p>
<h2>Overview</h2><p>
- KNDB Session is based on Native Session but has database functionality built in.
<br />
- Should be compatible with Codeignitor version 1.54 and 1.6.
<br />
- Designed as drop-in replacement for CI&#8217;s bundled session library.
<br />
- Allows you to access values from single-dimensional arrays &amp; objects stored in the session
<br />
- Config options and flash data are supported (with exception of session encryption).
<br />
- When using with a database, only the session_id is stored in a cookie. Any other data is stored in the database.
<br />
- When using without a database, only the session_id is stored in a cookie. Any other data is stored in a file on the server (as PHP does natively).
<br />
- KNDB Session is written for PHP5 but could be slightly altered to work with PHP4 (most notably the regenerate_id() method)
</p>
<p>
</p><h2>Differences between KNDB Session and Native Session</h2><p>
- Allows use of a database for session storage
<br />
- Keeps track of both sess_expiration and sess_time_to_update (in config) and thus distinguishes between session id needing regeneration and the session actually expiring (Native session considered sess_expiration as the time needed to regenerate a session id and never expires the session)
<br />
- Added method all_userdata() to get all session data: this method is in CI&#8217;s bundled session library but missing from Native Session
<br />
- Allows you to access values from single-dimensional arrays &amp; objects stored in the session
<br />
- Made some changes to regenerate_id() method to shorten code and a fix potential bug there
</p>
<h2>Required Database Structure</h2><p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">CREATE TABLE sessions </span><span style="color: #007700">(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000BB">session_id varchar</span><span style="color: #007700">(</span><span style="color: #0000BB">32</span><span style="color: #007700">) </span><span style="color: #0000BB">NOT NULL</span><span style="color: #007700">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000BB">session_last_access int</span><span style="color: #007700">(</span><span style="color: #0000BB">10</span><span style="color: #007700">) </span><span style="color: #0000BB">unsigned</span><span style="color: #007700">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000BB">session_data text</span><span style="color: #007700">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000BB">PRIMARY KEY </span><span style="color: #007700">(</span><span style="color: #0000BB">session_id</span><span style="color: #007700">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />);</span>
</code></div><p>
</p>
<h2>Example Configuration (/system/application/config/config.php)</h2><p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_cookie_name'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #DD0000">'CISESSION'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_expiration'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #0000BB">7200</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_encrypt_cookie'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_table_name'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #DD0000">'sessions'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_match_ip'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_match_useragent'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_use_database'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'sess_time_to_update'</span><span style="color: #0000BB">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">= </span><span style="color: #0000BB">300</span><span style="color: #007700">;</span>
</code></div><p>
</p>
<h2>Usage</h2><p>
- Place the code in a file named Session.php in your /system/application/libraries/ directory.
<br />
- Use this lib as if you would CI&#8217;s bundled session library.
</p>
<h2>Changelog</h2><p>
<b>March 31, 2008:</b> Added ability for values to be retrieved from single-dimensional arrays in the session
<br />
<b>April 10, 2008:</b> Added ability for values to be retrieved from objects in the session
</p>
<h2>Code</h2><p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&lt;?php&nbsp;&nbsp;</span><span style="color: #007700">if (!</span><span style="color: #0000BB">defined</span><span style="color: #007700">(</span><span style="color: #DD0000">'BASEPATH'</span><span style="color: #007700">)) exit(</span><span style="color: #DD0000">'No direct script access allowed'</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">/**<br /> * Code Igniter<br /> *<br /> * An open source application development framework for PHP 4.3.2 or newer<br /> *<br /> * @package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CodeIgniter<br /> * @author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Elise Bosse<br /> * @copyright&nbsp;&nbsp;&nbsp;Copyright (c) 2008, E.Bosse<br /> * @license&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.codeignitor.com/user_guide/license.html<br /> * @link&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.codeigniter.com<br /> * @since&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Version 1.2<br /> * @filesource<br /> */<br /><br />// ------------------------------------------------------------------------<br /><br />/**<br /> * Session class using native PHP session features and hardened against session fixation.<br /> * Non-database part is based upon Dariusz Debowczyk's Native session library with some updates.<br /> * The DB part makes use of PHP's session_set_save_handler() functionality<br /> * This library is written for PHP 5 but it could be altered a bit to make it work in PHP4<br /> *<br /> * @package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CodeIgniter<br /> * @subpackage&nbsp;&nbsp;Libraries<br /> * @category&nbsp;&nbsp;&nbsp;&nbsp;Sessions<br /> * @author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Elise Bosse<br /> * @link&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.codeigniter.com/user_guide/libraries/sessions.html<br /> * @class link&nbsp;&nbsp;http://codeigniter.com/wiki/KNDB_Session/<br /> */<br /><br />/**<br /> * If using a database, create the following database table and make sure config file is set properly<br /> *<br /> * CREATE TABLE sessions (<br /> * session_id varchar(32) NOT NULL,<br /> * session_last_access int(10) unsigned,<br /> * session_data text,<br /> * PRIMARY KEY (session_id)<br /> * );<br />*/<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">CI_Session &#123;<br /><br />&nbsp;&nbsp;private $_lifetime</span><span style="color: #007700">; <br />&nbsp;&nbsp;</span><span style="color: #0000BB">private $_sess_id_ttl</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">private $_match_ip</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">private $_match_useragent</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">private $_sess_db</span><span style="color: #007700">;&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">private $_useDB</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">private $_sess_table</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">private $_flash_key </span><span style="color: #007700">= </span><span style="color: #DD0000">'flash'</span><span style="color: #007700">; </span><span style="color: #FF8000">// prefix for "flash" variables (eg. flash:new:message)<br /><br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object </span><span style="color: #007700">=&amp; </span><span style="color: #0000BB">get_instance</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// set config variables<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_lifetime </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_expiration'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_id_ttl </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_time_to_update'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_match_ip </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_match_ip'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_match_useragent </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_match_useragent'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_useDB </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_use_database'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_table </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_table_name'</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">log_message</span><span style="color: #007700">(</span><span style="color: #DD0000">'debug'</span><span style="color: #007700">, </span><span style="color: #DD0000">"Session Class Initialized"</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_run</span><span style="color: #007700">();<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Starts up the session system for current request<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_sess_run</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// Set session table and register this object as the session handler, if using databases<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_useDB </span><span style="color: #007700">== </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_set_save_handler</span><span style="color: #007700">(array(&amp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"_open"</span><span style="color: #007700">), array(&amp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"_close"</span><span style="color: #007700">), array(&amp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"_read"</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(&amp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"_write"</span><span style="color: #007700">),array(&amp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"_destroy"</span><span style="color: #007700">),array(&amp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"_gc"</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;session_start</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// if no lifetime set in config, set to 2 years<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_lifetime</span><span style="color: #007700">) || </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_lifetime </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">0</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_lifetime </span><span style="color: #007700">= (</span><span style="color: #0000BB">60</span><span style="color: #007700">*</span><span style="color: #0000BB">60</span><span style="color: #007700">*</span><span style="color: #0000BB">24</span><span style="color: #007700">*</span><span style="color: #0000BB">365</span><span style="color: #007700">*</span><span style="color: #0000BB">2</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// if no session ID regeneration time set in config, set to 30 minutes<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_id_ttl</span><span style="color: #007700">) || </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_id_ttl </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">0</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_id_ttl </span><span style="color: #007700">= </span><span style="color: #0000BB">1800</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// check if session has expired<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_session_expired</span><span style="color: #007700">()) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sess_destroy</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// match IP address if necessary<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_match_ip </span><span style="color: #007700">== </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_ips_match</span><span style="color: #007700">() == </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sess_destroy</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// match user agent if necessary<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_match_useragent </span><span style="color: #007700">== </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_useragents_match</span><span style="color: #007700">() == </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sess_destroy</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// regenerate session id if necessary<br />&nbsp;&nbsp;&nbsp;&nbsp;// session data stays the same, but old session storage is destroyed<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if ( </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_id_expired</span><span style="color: #007700">() ) </span><span style="color: #0000BB">&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">regenerate_id</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// delete old flashdata (from last request)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flashdata_sweep</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// mark all new flashdata as old (data will be deleted before next request)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flashdata_mark</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// finally, set last access time to now<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_access'</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">());<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Checks if session has expired<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_session_expired</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// if this is the first time coming in, initialize access time<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (!</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_access'</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_access'</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;$delta </span><span style="color: #007700">= </span><span style="color: #0000BB">time</span><span style="color: #007700">() - </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_access'</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if (</span><span style="color: #0000BB">$delta&nbsp;&nbsp;</span><span style="color: #007700">&gt;=&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_lifetime </span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">true</span><span style="color: #007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Checks if stored IP matches current IP<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_ips_match</span><span style="color: #007700">() </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// if this is the first time coming in, initialize IP address<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (!</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_ip_address'</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_ip_address'</span><span style="color: #007700">,&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">input</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ip_address</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_ip_address'</span><span style="color: #007700">) == </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">input</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ip_address</span><span style="color: #007700">();<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Checks if stored user agent matches current user agent<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_useragents_match</span><span style="color: #007700">() </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// if this is the first time coming in, initialize user agent<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (!</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_useragent'</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_useragent'</span><span style="color: #007700">, </span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">input</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">user_agent</span><span style="color: #007700">(), </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">50</span><span style="color: #007700">)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_useragent'</span><span style="color: #007700">) == </span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">input</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">user_agent</span><span style="color: #007700">(), </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">50</span><span style="color: #007700">));<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Checks if session id needs regenerating<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_sess_id_expired</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// if this is the first time coming in, initialize regenerated time<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (!</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_regenerated'</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_regenerated'</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;$delta </span><span style="color: #007700">= </span><span style="color: #0000BB">time</span><span style="color: #007700">() - </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_regenerated'</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if ( </span><span style="color: #0000BB">$delta </span><span style="color: #007700">&gt;=&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_id_ttl </span><span style="color: #007700">) </span><span style="color: #0000BB">&#123; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Regenerates session id<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">regenerate_id</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// regenerate session id and store it<br />&nbsp;&nbsp;&nbsp;&nbsp;// $delete_old_session parameter works in PHP5 only! <br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">session_regenerate_id</span><span style="color: #007700">(</span><span style="color: #0000BB">TRUE</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// update the session generation time<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #DD0000">'sess_last_regenerated'</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">());<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Destroys the session and erases session storage<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">sess_destroy</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;session_unset</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;if ( isset( </span><span style="color: #0000BB">$_COOKIE&#91;session_name</span><span style="color: #007700">()</span><span style="color: #0000BB">&#93; </span><span style="color: #007700">) )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//@@@ was having trouble just using setcookie() because it wasn't unsetting fast enough<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$_COOKIE&#91;session_name</span><span style="color: #007700">()</span><span style="color: #0000BB">&#93;</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">setcookie</span><span style="color: #007700">(</span><span style="color: #0000BB">session_name</span><span style="color: #007700">(), </span><span style="color: #DD0000">''</span><span style="color: #007700">, </span><span style="color: #0000BB">time</span><span style="color: #007700">()-</span><span style="color: #0000BB">42000</span><span style="color: #007700">, </span><span style="color: #DD0000">'/'</span><span style="color: #007700">); </span><span style="color: #FF8000">//@@@<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;session_destroy</span><span style="color: #007700">();<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;* returns the session id of the current session&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">get_sess_id</span><span style="color: #007700">() </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">session_id</span><span style="color: #007700">();<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Reads given session attribute value: single variable, element of single dimensional array, or property of object<br />&nbsp;&nbsp;&nbsp;* I was kind of of two minds about whether the object bit should be implemented<br />&nbsp;&nbsp;&nbsp;* so you can take out that logic if you wish<br />&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$item</span><span style="color: #007700">, </span><span style="color: #0000BB">$subitem</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// this item is in an array<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$subitem</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$subitem </span><span style="color: #007700">== </span><span style="color: #DD0000">'session_id'</span><span style="color: #007700">)</span><span style="color: #0000BB">&#123; </span><span style="color: #FF8000">//added for backward-compatibility&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">session_id</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125; </span><span style="color: #007700">else </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// array vs. object: handled differently<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (isset(</span><span style="color: #0000BB">$_SESSION&#91;$item&#93;</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION&#91;$item&#93;</span><span style="color: #007700">)) return (!isset(</span><span style="color: #0000BB">$_SESSION&#91;$item&#93;&#91;$subitem&#93;</span><span style="color: #007700">)) ? </span><span style="color: #0000BB">false </span><span style="color: #007700">: </span><span style="color: #0000BB">$_SESSION&#91;$item&#93;&#91;$subitem&#93;</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (</span><span style="color: #0000BB">is_object</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION&#91;$item&#93;</span><span style="color: #007700">)) return (!isset(</span><span style="color: #0000BB">$_SESSION&#91;$item&#93;</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$subitem</span><span style="color: #007700">)) ? </span><span style="color: #0000BB">false </span><span style="color: #007700">: </span><span style="color: #0000BB">$_SESSION&#91;$item&#93;</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$subitem</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">// this item is not in an array<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">else </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$item </span><span style="color: #007700">== </span><span style="color: #DD0000">'session_id'</span><span style="color: #007700">)</span><span style="color: #0000BB">&#123; </span><span style="color: #FF8000">//added for backward-compatibility<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">session_id</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125; </span><span style="color: #007700">else </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return ( ! isset(</span><span style="color: #0000BB">$_SESSION&#91;$item&#93;</span><span style="color: #007700">)) ? </span><span style="color: #0000BB">false </span><span style="color: #007700">: </span><span style="color: #0000BB">$_SESSION&#91;$item&#93;</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br /><br />&nbsp;&nbsp;&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Returns all session data<br />&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">all_userdata</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (isset(</span><span style="color: #0000BB">$_SESSION&#91;</span><span style="color: #DD0000">'session_id'</span><span style="color: #0000BB">&#93;</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123; </span><span style="color: #FF8000">//added for backward-compatibility<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$_SESSION&#91;</span><span style="color: #DD0000">'session_id'</span><span style="color: #0000BB">&#93; </span><span style="color: #007700">= </span><span style="color: #0000BB">session_id</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Sets session attributes to the given values<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$newdata </span><span style="color: #007700">= array(), </span><span style="color: #0000BB">$newval </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">is_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$newdata</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$newdata </span><span style="color: #007700">= array(</span><span style="color: #0000BB">$newdata </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$newval</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$newdata</span><span style="color: #007700">) &gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$newdata </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$_SESSION&#91;$key&#93; </span><span style="color: #007700">= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Erases given session attributes<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">unset_userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$newdata </span><span style="color: #007700">= array())<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">is_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$newdata</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$newdata </span><span style="color: #007700">= array(</span><span style="color: #0000BB">$newdata </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">''</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$newdata</span><span style="color: #007700">) &gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$newdata </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$_SESSION&#91;$key&#93;</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&#125;<br /><br /><br /></span><span style="color: #FF8000">/**<br />* Sets "flash" data which will be available only in next request (then it will<br />* be deleted from session). You can use it to implement "Save succeeded" messages<br />* after redirect.<br />*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">set_flashdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$key</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$flash_key </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flash_key</span><span style="color: #007700">.</span><span style="color: #DD0000">':new:'</span><span style="color: #007700">.</span><span style="color: #0000BB">$key</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$flash_key</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Keeps existing "flash" data available to next request.<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">keep_flashdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$key</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$old_flash_key </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flash_key</span><span style="color: #007700">.</span><span style="color: #DD0000">':old:'</span><span style="color: #007700">.</span><span style="color: #0000BB">$key</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$value </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$old_flash_key</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$new_flash_key </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flash_key</span><span style="color: #007700">.</span><span style="color: #DD0000">':new:'</span><span style="color: #007700">.</span><span style="color: #0000BB">$key</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$new_flash_key</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* Returns "flash" data for the given key.<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">flashdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$key</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$flash_key </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flash_key</span><span style="color: #007700">.</span><span style="color: #DD0000">':old:'</span><span style="color: #007700">.</span><span style="color: #0000BB">$key</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$flash_key</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* PRIVATE: Internal method - marks "flash" session attributes as 'old'<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_flashdata_mark</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$_SESSION </span><span style="color: #007700">as </span><span style="color: #0000BB">$name </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$parts </span><span style="color: #007700">= </span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">':new:'</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if (</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$parts</span><span style="color: #007700">) &amp;&amp; </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$parts</span><span style="color: #007700">) == </span><span style="color: #0000BB">2</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new_name </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flash_key</span><span style="color: #007700">.</span><span style="color: #DD0000">':old:'</span><span style="color: #007700">.</span><span style="color: #0000BB">$parts&#91;1&#93;</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$new_name</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">unset_userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;* PRIVATE: Internal method - removes "flash" session marked as 'old'<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_flashdata_sweep</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$_SESSION </span><span style="color: #007700">as </span><span style="color: #0000BB">$name </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$parts </span><span style="color: #007700">= </span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">':old:'</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if (</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$parts</span><span style="color: #007700">) &amp;&amp; </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$parts</span><span style="color: #007700">) == </span><span style="color: #0000BB">2 </span><span style="color: #007700">&amp;&amp; </span><span style="color: #0000BB">$parts&#91;0&#93; </span><span style="color: #007700">== </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_flash_key</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">unset_userdata</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&#125;<br /><br /><br /><br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">/************* DATABASE METHODS ***************/<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_open</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_connect</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">hostname</span><span style="color: #007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">username</span><span style="color: #007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">password</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">database</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_close</span><span style="color: #007700">()<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">mysql_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$id</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$id </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_real_escape_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$id</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$sql </span><span style="color: #007700">= </span><span style="color: #DD0000">"SELECT session_data FROM $this-&gt;_sess_table WHERE session_id = '$id'"</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if (</span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$sql</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if (</span><span style="color: #0000BB">mysql_num_rows</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$record </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_fetch_assoc</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">$record&#91;</span><span style="color: #DD0000">'session_data'</span><span style="color: #0000BB">&#93;</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_write</span><span style="color: #007700">(</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$data</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$access </span><span style="color: #007700">= </span><span style="color: #0000BB">time</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$id </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_real_escape_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$id</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$access </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_real_escape_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$access</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_real_escape_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$sql </span><span style="color: #007700">= </span><span style="color: #DD0000">"REPLACE INTO $this-&gt;_sess_table VALUES ('$id', '$access', '$data')"</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$sql</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_destroy</span><span style="color: #007700">(</span><span style="color: #0000BB">$id</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$id </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_real_escape_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$id</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$sql </span><span style="color: #007700">= </span><span style="color: #DD0000">"DELETE FROM $this-&gt;_sess_table WHERE session_id = '$id'"</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$sql</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db</span><span style="color: #007700">) or die(</span><span style="color: #DD0000">"failed to delete&lt;br&gt;"</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">_gc</span><span style="color: #007700">(</span><span style="color: #0000BB">$max</span><span style="color: #007700">)<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$old </span><span style="color: #007700">= </span><span style="color: #0000BB">time</span><span style="color: #007700">() - </span><span style="color: #0000BB">$max</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$old </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_real_escape_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$old</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$sql </span><span style="color: #007700">= </span><span style="color: #DD0000">"DELETE FROM $this-&gt;_sess_table WHERE session_last_access &lt; '$old'"</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$sql</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">_sess_db</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br /><br />&#125;<br />?&gt;</span>
</code></div><p>
</p>]]></description>
      <dc:subject>KNDB Session</dc:subject>
      <dc:date>2008-07-17T08:31:19-06:00</dc:date>
    </item>

    <item>
      <title>JTaby CRUD System</title>
      <link>http://codeigniter.com/wiki/JTaby_CRUD_System/</link>
      <guid>http://codeigniter.com/wiki/JTaby_CRUD_System/</guid>
      <description><![CDATA[<p><a href="http://codeigniter.com/wiki/Category:Library::CodeGenerators/" title="Category:Library::CodeGenerators">Category:Library -&gt; CodeGenerators</a> | <a href="http://codeigniter.com/wiki/Category:Library::Community/" title="Category:Library::Community">Category:Library -&gt; Community</a>
</p>
<h3>Introduction</h3><p>
Hello Everyone,
<br />
I&#8217;ve been working with CI for 3 months now and as soon as I built my first project, I noticed that something was missing: A backend generator. So I started working on one for my own project then I noticed that it was generic enough and flexible enough to reworked as a bunch of libraries working together. Then while browsing the forums, I kept seeing requests from people who need a way to generate a backend for themselves, or their clients. After seeing how my client reacted to the system, I decided to release the system and share it with everyone, so, here goes:
</p>
<p>
<b><span style="font-size:16px;"><span style="color:blue;">Current Release: 1.2.1</span></span></b>
</p>
<p>
<b>IMPORTANT NOTE:</b> Please make sure you have the latest version, the previous versions had bugs which could possible present security holes.
</p>
<p>
There are two versions to download: The basic, and the full. The full comes with CI bundled, the basic does not. However, the full comes with a CI bug fixed which used to cause an error when global xss filtering is on.
</p>
<p>
To install the basic version, just drag &amp; drop the files/folders into their respective folders (as shown in the directory structure of the zip)
<br />
</p><h3>Resources</h3><p>
<a href="http://citastic.com/JTabyBackend/JTaby1_2Final/backend.php">Live Demo (username: demo, password: demo)</a>
<br />
<a href="http://citastic.com/JTabyBackend/CodeIgniter/Documentation.html"> Documentation </a>
<br />
<a href="http://citastic.com/JTabyBackend/JTabyBackendBasic_1_2_1.zip">Download JTabyBackend Basic</a> (932 KB)
<br />
<a href="http://citastic.com/JTabyBackend/JTabyBackend_1_2_1.zip">Download link (With CI Bundled - contains a bug fix)</a> (1.2 MB)
<br />
<a href="http://citastic.com/JTabyBackend/JTaby">Setup video</a>
<br />
<a href="http://codeigniter.com/forums/viewthread/64053/">Forum</a>
</p>
<p>
The zip also contains CodeIgniter (latest release). The video should be sufficient to help you setup the system and play with it. It shouldn&#8217;t take you longer than 1 hour to figure how everything works, it&#8217;s quite simple: Just look at the bundled examples.
<br />
</p><h3>Main System Features</h3><p>
- Transparent multi-level login
<br />
- Validation
<br />
- Unified messaging system
<br />
- on-the-fly form generation
<br />
- Extremely rapid development (~40 lines per controller)
</p>
<p>
Version 1.2.1 Changelog:
<br />
- Fixes a bug which triggered a &#8220;Cannot redeclare class TextBox&#8221; in PHP4
</p>
<p>
New Features in version 1.2:
<br />
- Sorting
<br />
- Multiple fields in list view
<br />
- Bug fixes of all sorts
</p>
<h3>Notes</h3><p>
- It has come to my attention (Athfar, #codeigniter on irc.freenode.net) that IE7 is PMS&#8217;ing about the CSS, so instead of fixing it, I&#8217;m going to do what any die-hard OCD&#8217;er would do, and redesign the whole thing, make it brighter and happier :)
<br />
- Please note that this is the first time I release open-source code like this, so let me know if I&#8217;m doing this wrong.
<br />
- I&#8217;m working on getting a hosting account to host the file and a demo.
<br />
- The video takes a bit to load, but once it&#8217;s loaded, it should play fine.
</p>]]></description>
      <dc:subject>JTaby CRUD System</dc:subject>
      <dc:date>2008-07-17T08:31:08-06:00</dc:date>
    </item>

    <item>
      <title>Get Cache File Contents</title>
      <link>http://codeigniter.com/wiki/Get_Cache_File_Contents/</link>
      <guid>http://codeigniter.com/wiki/Get_Cache_File_Contents/</guid>
      <description><![CDATA[<p><a href="http://codeigniter.com/wiki/Category:Library::Cache/" title="Category:Library::Cache">Category:Library -&gt; Cache</a> | <a href="http://codeigniter.com/wiki/Category:Library::Community/" title="Category:Library::Community">Category:Library -&gt; Community</a>
</p>
<p>
Here is an extension for the Output Library that aims to retrieve cached file contents and let you do fragment caching.
</p>
<p>
You just have to create a file called MY_Output.php in the system/application/libraries folder and put this code in the file :
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">&lt;?<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MY_Output </span><span style="color: #007700">extends </span><span style="color: #0000BB">CI_Output &#123;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">My_Output</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent</span><span style="color: #007700">::</span><span style="color: #0000BB">CI_Output</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function </span><span style="color: #0000BB">get_cached_file&#40;$url&#41; &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$CI </span><span style="color: #007700">=&amp; </span><span style="color: #0000BB">get_instance</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/* defines cache path */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$cache_path </span><span style="color: #007700">= </span><span style="color: #DD0000">"system/cache/"</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$CI</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'cache_path'</span><span style="color: #007700">)) &gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cache_path </span><span style="color: #007700">= </span><span style="color: #0000BB">$CI</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'cache_path'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/* retreives cache file */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$cached_url </span><span style="color: #007700">= </span><span style="color: #0000BB">base_url</span><span style="color: #007700">().</span><span style="color: #0000BB">$CI</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">config</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">(</span><span style="color: #DD0000">'index_page'</span><span style="color: #007700">).</span><span style="color: #DD0000">"/"</span><span style="color: #007700">.</span><span style="color: #0000BB">$url</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$cached_file </span><span style="color: #007700">= </span><span style="color: #0000BB">$cache_path</span><span style="color: #007700">.</span><span style="color: #0000BB">md5</span><span style="color: #007700">(</span><span style="color: #0000BB">$cached_url</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/* checks if cached file exists */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$cached_file</span><span style="color: #007700">)) </span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/* gets cached content and removes timestamp */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$handle </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen&#40;$cached_file</span><span style="color: #007700">, </span><span style="color: #DD0000">"r"</span><span style="color: #0000BB">&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$contents </span><span style="color: #007700">= </span><span style="color: #0000BB">fread</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">, </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #0000BB">$cached_file</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$timestamp_pos </span><span style="color: #007700">= </span><span style="color: #0000BB">strpos</span><span style="color: #007700">(</span><span style="color: #0000BB">$contents</span><span style="color: #007700">, </span><span style="color: #DD0000">"---&gt;"</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$contents </span><span style="color: #007700">= </span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$contents</span><span style="color: #007700">, (</span><span style="color: #0000BB">$timestamp_pos </span><span style="color: #007700">+ </span><span style="color: #0000BB">4</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return </span><span style="color: #0000BB">$contents</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&#125;<br /><br />?&gt;</span>
</code></div><p>
</p>
<p>
Then the usage is pretty simple. Imagine you&#8217;ve called the $this-&gt;output-&gt;cache(); function from the sample_controller, within the sample_method, then you would access this fragment this way:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.yoursite.com/sample_controller/sample_method/</span>
</code></div><p>
</p>
<p>
Then you can use the new get_cached_file function to get the cached contents of this page. And you can do it this way:
</p>
<p>
</p><div class="codeblock"><code>
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">output</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">get_cached_file&#40;</span><span style="color: #DD0000">'sample_controller/sample_method'</span><span style="color: #0000BB">&#41;</span>
</code></div><p>
</p>]]></description>
      <dc:subject>Get Cache File Contents</dc:subject>
      <dc:date>2008-07-17T08:30:49-06:00</dc:date>
    </item>

    <item>
      <title>AJAX for CodeIgniter</title>
      <link>http://codeigniter.com/wiki/AJAX_for_CodeIgniter/</link>
      <guid>http://codeigniter.com/wiki/AJAX_for_CodeIgniter/</guid>
      <description><![CDATA[<p><a href="http://codeigniter.com/wiki/Category:Library::Community/" title="Category:Library::Community">Category:Library -&gt; Community</a> | <a href="http://codeigniter.com/wiki/Category:Library::AJAX/" title="Category:Library::AJAX">Category:Library -&gt; AJAX</a>
</p>
<p>
AJAX for CodeIgniter is a CodeIgniter library that provides you with AJAX functionality for your CodeIgniter web applications. It comes with simple to use AJAX helpers that you can directly put in use in your apps.o AJAX fr CodeIgniter includes both Prototype and Scriptaculous helpers. This is compatible with CodeIgniter 1.5.1.
</p>
<p>
Download: <a href="http://codeigniter.com/wiki/File:AJAX-for-CodeIgniter.zip/" title="File:AJAX-for-CodeIgniter.zip" class="noArticle">File:AJAX-for-CodeIgniter.zip</a>
</p>
<p>
Download: <a href="http://codeigniter.com/wiki/File:AJAX-for-CodeIgniter_v2.zip/" title="File:AJAX-for-CodeIgniter_v2.zip" class="noArticle">File:AJAX-for-CodeIgniter v2.zip</a> (with fixed bug)
</p>
<p>
Below is a quick and simple how-to-use article. For code references and full class documentation, please read the full user guide that comes with the zip file &#40;follow the above link to download&#41;. 
</p>
<p>
Enjoy this release.
<br />
- siric
</p>
<h3>How to use AJAX for CodeIgniter?</h3>
<p>
Place the AJAX library in the following directory (default libraries directory):
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">www</span><span style="color: #007700">-</span><span style="color: #0000BB">root</span><span style="color: #007700">/</span><span style="color: #0000BB">system</span><span style="color: #007700">/</span><span style="color: #0000BB">libraries</span><span style="color: #FF8000">/</span>
</code></div><p>
</p>
<p>
Place the javascript files in your www root directory. For example:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">www</span><span style="color: #007700">-</span><span style="color: #0000BB">root</span><span style="color: #007700">/</span><span style="color: #0000BB">javascript</span><span style="color: #FF8000">/</span>
</code></div><p>
</p>
<p>
If you use mod_rewrite, make sure you allow the javascript directory to be accessed. To do this, set up your <i>.htaccess</i> file to look something like this:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">RewriteEngine on<br />RewriteCond </span><span style="color: #007700">$</span><span style="color: #0000BB">1 </span><span style="color: #007700">!^(</span><span style="color: #0000BB">index\</span><span style="color: #007700">.</span><span style="color: #0000BB">php</span><span style="color: #007700">|</span><span style="color: #0000BB">images</span><span style="color: #007700">|</span><span style="color: #0000BB">stylesheets</span><span style="color: #007700">|</span><span style="color: #0000BB">javascript</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">RewriteRule </span><span style="color: #007700">^(.*)$ /</span><span style="color: #0000BB">index</span><span style="color: #007700">.</span><span style="color: #0000BB">php</span><span style="color: #007700">/$</span><span style="color: #0000BB">1 &#91;L&#93;</span>
</code></div><p>
</p>
<p>
Then, simply include whichever javascript files you would like to use in your html file:
<br />
</p><div class="codeblock"><code>
<span style="color: #007700">&lt;</span><span style="color: #0000BB">script src</span><span style="color: #007700">=</span><span style="color: #DD0000">"javascript/prototype.js" </span><span style="color: #0000BB">type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/javascript"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&lt;/script&gt;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">script src</span><span style="color: #007700">=</span><span style="color: #DD0000">"javascript/effects.js" </span><span style="color: #0000BB">type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/javascript"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&lt;/script&gt;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">script src</span><span style="color: #007700">=</span><span style="color: #DD0000">"javascript/dragdrop.js" </span><span style="color: #0000BB">type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/javascript"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&lt;/script&gt;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">script src</span><span style="color: #007700">=</span><span style="color: #DD0000">"javascript/controls.js" </span><span style="color: #0000BB">type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/javascript"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&lt;/script&gt;</span>
</code></div><p>
</p>
<p>
Finally, load up the AJAX library as you would with any other CodeIgniter library. There are two possible ways to do this. Directly from within your controller:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">library</span><span style="color: #007700">(</span><span style="color: #DD0000">'ajax'</span><span style="color: #007700">);</span>
</code></div><p>
</p>
<p>
Or, auto-load the AJAX library from within <i>system/application/config/autoload.php</i>:
<br />
</p><div class="codeblock"><code>
<span style="color: #0000BB">$autoload&#91;</span><span style="color: #DD0000">'libraries'</span><span style="color: #0000BB">&#93; </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'database'</span><span style="color: #007700">, </span><span style="color: #DD0000">'session'</span><span style="color: #007700">, </span><span style="color: #DD0000">'ajax'</span><span style="color: #007700">);</span>
</code></div><p>
</p>
<p>
Then all you need to do to use an AJAX helper is to call <i>$this-&gt;ajax</i>. For example:
<br />
</p><div class="codeblock"><code>
<span style="color: #007700">echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ajax</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">link_to_remote</span><span style="color: #007700">(</span><span style="color: #DD0000">"Login"</span><span style="color: #007700">, array(</span><span style="color: #DD0000">'url' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'/login'</span><span style="color: #007700">, </span><span style="color: #DD0000">'update' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'divblock'</span><span style="color: #007700">));</span>
</code></div><p>
</p>]]></description>
      <dc:subject>AJAX for CodeIgniter</dc:subject>
      <dc:date>2008-07-17T08:29:46-06:00</dc:date>
    </item>

    <item>
      <title>ADODB</title>
      <link>http://codeigniter.com/wiki/ADODB/</link>
      <guid>http://codeigniter.com/wiki/ADODB/</guid>
      <description><![CDATA[<p><a href="http://codeigniter.com/wiki/Category:Library::External/" title="Category:Library::External">Category:Library -&gt; External</a> | <a href="http://codeigniter.com/wiki/Category:Library::Database/" title="Category:Library::Database">Category:Library -&gt; Database</a>
</p>
<h3>Introduction</h3><p>
(<a href="http://www.codeigniter.com/forums/viewthread/612/">Originally discussed here</a>)
<br />
Here&#8217;s an <a href="http://adodb.sourceforge.net/">ADOdb</a> library for use in CI.
</p>
<p>
What are the benefits of Adodb? It&#8217;s mature, and supports <a href="http://phplens.com/adodb/supported.databases.html">lots of databases</a>.
<br />
I really like some of the features in it, <a href="http://phplens.com/lens/adodb/docs-adodb.htm#autoexecute">autoexecute()</a>, and <a href="http://phplens.com/lens/adodb/docs-adodb.htm#getrow">getrow()</a> are particularly useful. 
</p>
<h3>Setup</h3><p>
1. <a href="http://sourceforge.net/project/showfiles.php?group_id=42718">Grab ADODB</a>
<br />
2. Unzip to system/application/libraries/adodb/
<br />
3. Optionally apply <a href="http://codeigniter.com/wiki/ConfigLoadPatch/" title="ConfigLoadPatch">ConfigLoadPatch</a> (as of CI 1.3.3, this is not included), otherwise you&#8217;ll have to create a valid config/adodb.php or you&#8217;ll get a CI error 