<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <phpdoc:classref xml:id="class.sessionhandlerinterface" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude"> <title>The SessionHandlerInterface class</title> <titleabbrev>SessionHandlerInterface</titleabbrev> <partintro> <!-- {{{ SessionHandlerInterface intro --> <section xml:id="sessionhandlerinterface.intro"> &reftitle.intro; <para> <classname>SessionHandlerInterface</classname> is an <link linkend="language.oop5.interfaces">interface</link> which defines a prototype for creating a custom session handler. In order to pass a custom session handler to <function>session_set_save_handler</function> using its <literal>OOP</literal> invocation, the class must implement this interface. </para> <para> Please note the callback methods of this class are designed to be called internally by PHP and are not meant to be called from user-space code. </para> </section> <!-- }}} --> <section xml:id="sessionhandlerinterface.synopsis"> &reftitle.classsynopsis; <!-- {{{ Synopsis --> <classsynopsis> <ooclass><classname>SessionHandlerInterface</classname></ooclass> <!-- {{{ Class synopsis --> <classsynopsisinfo> <ooclass> <classname>SessionHandlerInterface</classname> </ooclass> </classsynopsisinfo> <!-- }}} --> <classsynopsisinfo role="comment">&Methods;</classsynopsisinfo> <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.sessionhandlerinterface')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" /> </classsynopsis> <!-- }}} --> </section> <section xml:id="sessionhandlerinterface.examples"> <example> <title> Example using <classname>SessionHandlerInterface</classname> </title> <para> The following example provides file based session storage similar to the PHP sessions default save handler <parameter>files</parameter>. This example could easily be extended to cover database storage using your favorite PHP supported database engine. </para> <para> Note we use the OOP prototype with <function>session_set_save_handler</function> and register the shutdown function using the function's parameter flag. This is generally advised when registering objects as session save handlers. </para> <programlisting role="php"> <![CDATA[ <?php class MySessionHandler implements SessionHandlerInterface { private $savePath; public function open($savePath, $sessionName) { $this->savePath = $savePath; if (!is_dir($this->savePath)) { mkdir($this->savePath, 0777); } return true; } public function close() { return true; } public function read($id) { return (string)@file_get_contents("$this->savePath/sess_$id"); } public function write($id, $data) { return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true; } public function destroy($id) { $file = "$this->savePath/sess_$id"; if (file_exists($file)) { unlink($file); } return true; } public function gc($maxlifetime) { foreach (glob("$this->savePath/sess_*") as $file) { if (filemtime($file) + $maxlifetime < time() && file_exists($file)) { unlink($file); } } return true; } } $handler = new MySessionHandler(); session_set_save_handler($handler, true); session_start(); // proceed to set and retrieve values by key from $_SESSION ]]> </programlisting> </example> </section> </partintro> &reference.session.entities.sessionhandlerinterface; </phpdoc:classref> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"~/.phpdoc/manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->