| 
	
 | 
 Posted by _Mario.lat on 04/17/06 14:07 
Hallo, 
I have a little question: 
In the function session_set_save_handler I can pass the name of function 
which deal with session. 
In Xoops code I see the use of this function like that: 
 
session_set_save_handler(array(&$sess_handler, 'open'), 
array(&$sess_handler, 'close'), array(&$sess_handler, 'read'), 
array(&$sess_handler, 'write'), array(&$sess_handler, 'destroy'), 
array(&$sess_handler, 'gc')); 
 
How does it works? 
why it use  "array(&$sess_handler, 'open')" and not "$sess_handler->open" 
? How "array(&$sess_handler, 'open')" works? 
Thank you in advance for the time you'll spend for me. Mario. 
 
 
Following the code of the class $sess_handler: 
 
<?php 
// $Id: session.php,v 1.3 2004/01/02 19:15:13 okazu Exp $ 
//  ------------------------------------------------------------------------ // 
//                XOOPS - PHP Content Management System                      // 
//                    Copyright (c) 2000 XOOPS.org                           // 
//                       <http://www.xoops.org/>                             // 
//  ------------------------------------------------------------------------ // 
//  This program is free software; you can redistribute it and/or modify     // 
//  it under the terms of the GNU General Public License as published by     // 
//  the Free Software Foundation; either version 2 of the License, or        // 
//  (at your option) any later version.                                      // 
//                                                                           // 
//  You may not change or alter any portion of this comment or credits       // 
//  of supporting developers from this source code or any supporting         // 
//  source code which is considered copyrighted (c) material of the          // 
//  original comment or credit authors.                                      // 
//                                                                           // 
//  This program is distributed in the hope that it will be useful,          // 
//  but WITHOUT ANY WARRANTY; without even the implied warranty of           // 
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            // 
//  GNU General Public License for more details.                             // 
//                                                                           // 
//  You should have received a copy of the GNU General Public License        // 
//  along with this program; if not, write to the Free Software              // 
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA // 
//  ------------------------------------------------------------------------ // 
// Author: Kazumi Ono (AKA onokazu)                                          // 
// URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ // 
// Project: The XOOPS Project                                                // 
// ------------------------------------------------------------------------- // 
/** 
 * @package     kernel 
 *  
 * @author	    Kazumi Ono	<onokazu@xoops.org> 
 * @copyright	copyright (c) 2000-2003 XOOPS.org 
 */ 
 
 
/** 
 * Handler for a session 
 * @package     kernel 
 *  
 * @author	    Kazumi Ono	<onokazu@xoops.org> 
 * @copyright	copyright (c) 2000-2003 XOOPS.org 
 */ 
class XoopsSessionHandler 
{ 
 
    /** 
     * Database connection 
     *  
     * @var	object 
     * @access	private 
     */ 
    var $db; 
 
    /** 
     * Constructor 
     *  
     * @param	object  &$mf    reference to a XoopsManagerFactory 
     *  
     */ 
    function XoopsSessionHandler(&$db) 
    { 
        $this->db =& $db; 
    } 
 
    /** 
     * Open a session 
     *  
     * @param	string  $save_path 
     * @param	string  $session_name 
     *  
     * @return	bool 
     */ 
    function open($save_path, $session_name) 
	{ 
        return true; 
    } 
 
    /** 
     * Close a session 
     *  
     * @return	bool 
     */ 
    function close() 
	{ 
        return true; 
    } 
 
    /** 
     * Read a session from the database 
     *  
     * @param	string  &sess_id    ID of the session 
     *  
     * @return	array   Session data 
     */ 
    function read($sess_id) 
	{ 
        $sql = sprintf('SELECT sess_data FROM %s WHERE sess_id = %s', $this->db->prefix('session'), $this->db->quoteString($sess_id)); 
        if (false != $result = $this->db->query($sql)) { 
            if (list($sess_data) = $this->db->fetchRow($result)) { 
                return $sess_data; 
            } 
        } 
        return ''; 
    } 
 
    /** 
     * Write a session to the database 
     *  
     * @param   string  $sess_id 
     * @param   string  $sess_data 
     *  
     * @return  bool     
     **/ 
    function write($sess_id, $sess_data) 
	{ 
		$sess_id = $this->db->quoteString($sess_id); 
		list($count) = $this->db->fetchRow($this->db->query("SELECT COUNT(*) FROM ".$this->db->prefix('session')." WHERE sess_id=".$sess_id)); 
        if ( $count > 0 ) { 
			$sql = sprintf('UPDATE %s SET sess_updated = %u, sess_data = %s WHERE sess_id = %s', $this->db->prefix('session'), time(), $this->db->quoteString($sess_data), $sess_id); 
        } else { 
			$sql = sprintf('INSERT INTO %s (sess_id, sess_updated, sess_ip, sess_data) VALUES (%s, %u, %s, %s)', $this->db->prefix('session'), $sess_id, time(), $this->db->quoteString($_SERVER['REMOTE_ADDR']), $this->db->quoteString($sess_data)); 
        } 
		if (!$this->db->queryF($sql)) { 
            return false; 
        } 
		return true; 
    } 
 
    /** 
     * Destroy a session 
     *  
     * @param   string  $sess_id 
     *  
     * @return  bool 
     **/ 
    function destroy($sess_id) 
    { 
		$sql = sprintf('DELETE FROM %s WHERE sess_id = %s', $this->db->prefix('session'), $this->db->quoteString($sess_id)); 
        if ( !$result = $this->db->queryF($sql) ) { 
            return false; 
        } 
        return true; 
    } 
 
    /** 
     * Garbage Collector 
     *  
     * @param   int $expire Time in seconds until a session expires 
	 * @return  bool 
     **/ 
    function gc($expire) 
    { 
        $mintime = time() - intval($expire); 
		$sql = sprintf('DELETE FROM %s WHERE sess_updated < %u', $this->db->prefix('session'), $mintime); 
        return $this->db->queryF($sql); 
    } 
} 
?>
 
  
Navigation:
[Reply to this message] 
 |