XCache Session Storage Handler:

Bei diesem Joomla Hack handelt es sich um einen Session Handler für das Joomla 1.5 Framework, welcher auf die XCache Erweiterung aufsetzt. Diese Erweiterung speichert kompilierte OPCode Array's in einem Shared Memory Segment und erzielt dadurch einen sehr hohen Performance Gewinn. Auch bietet diese Erweiterung eine kleine Api um benutzerdefinierte Inhalte zu lesen, schreiben und zu löschen.

Der XCache Session Storage Hanlder hat Einzug in das offizelle Joomla SVN Repository gefunden. Somit muss man ihn nicht mehr installieren. Bei der offizellen ersten stable Version von 1.5 ist er mit dabei.

Hier der Quellcode:

<?php
/**
* @version $Id:apc.php 6961 2007-03-15 16:06:53Z tcp $
* @package Joomla.Framework
* @subpackage Session
* @copyright Copyright (C) 2005 - 2007 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die();

/**
* Xcache session storage handler
*
* @author Axel Sauerhöfer < This e-mail address is being protected from spambots. You need JavaScript enabled to view it >
* @package Joomla.Framework
* @subpackage Cache
* @since 1.5
*/
class JSessionStorageXcache extends JSessionStorage
{
/**
* Constructor
*
* @access protected
* @param array $options optional parameters
*/
function __construct( $options = array() )
{
if (!$this->test()) {
return JError::raiseError(404, "The xcache extension isn't available");
}

parent::__construct($options);
}

/**
* Open the SessionHandler backend.
*
* @access public
* @param string $save_path The path to the session object.
* @param string $session_name The name of the session.
* @return boolean True on success, false otherwise.
*/
function open($save_path, $session_name)
{
return true;
}

/**
* Close the SessionHandler backend.
*
* @access public
* @return boolean True on success, false otherwise.
*/
function close()
{
return true;
}

/**
* Read the data for a particular session identifier from the
* SessionHandler backend.
*
* @access public
* @param string $id The session identifier.
* @return string The session data.
*/
function read($id)
{
$sess_id = 'sess_'.$id;

//check if id exists
if( !xcache_isset( $sess_id ) ){
return;
}

return (string)xcache_get($sess_id);
}

/**
* Write session data to the SessionHandler backend.
*
* @access public
* @param string $id The session identifier.
* @param string $session_data The session data.
* @return boolean True on success, false otherwise.
*/
function write($id, $session_data)
{
$sess_id = 'sess_'.$id;
return xcache_set($sess_id, $session_data, ini_get("session.gc_maxlifetime") );
}

/**
* Destroy the data for a particular session identifier in the
* SessionHandler backend.
*
* @access public
* @param string $id The session identifier.
* @return boolean True on success, false otherwise.
*/
function destroy($id)
{
$sess_id = 'sess_'.$id;

if( !xcache_isset( $sess_id ) ){
return true;
}

return xcache_unset($sess_id);
}

/**
* Garbage collect stale sessions from the SessionHandler backend.
*
* @access public
* @param integer $maxlifetime The maximum age of a session.
* @return boolean True on success, false otherwise.
*/
function gc($maxlifetime)
{
return true;
}

/**
* Test to see if the SessionHandler is available.
*
* @static
* @access public
* @return boolean True on success, false otherwise.
*/
function test() {
return (extension_loaded('xcache') && function_exists('xcache_set'));
}
}

Download:

http://www.willcodejoomlaforfood.de/downloads/xcache_session_storage_handler.tar.gz