how it works? pass a function as array(&$sess_handler, 'open') instead of '$sess_handler->open'
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.php archive

how it works? pass a function as array(&$sess_handler, 'open') instead of '$sess_handler->open'

From: _Mario.lat <mario.lat@libero.it>
Date: Mon Apr 17 2006 - 13:07:27 CEST

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);
    }
}
?>
Received on Mon May 1 02:57:47 2006