1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
<?php
require_once dirname(__FILE__) . '/sql.php';
/**
* SessionHandler implementation for PHP's PEAR database abstraction layer.
*
* If you access your database through ODBC, you will almost certainly need
* to change PHP's default value for odbc.defaultlrl (this is a php.ini
* setting). The default is 4096, which is too small (your session data will
* be chopped off), and setting it to 0 DOES NOT work - that doesn't mean no
* limit, for some reason. odbc.defaultlrl = 32768 seems to work pretty well
* (using MSSQL-2000).
*
* Required parameters:<pre>
* 'hostspec' The hostname of the database server.
* 'protocol' The communication protocol ('tcp', 'unix', etc.).
* 'username' The username with which to connect to the database.
* 'password' The password associated with 'username'.
* 'database' The name of the database.</pre>
*
* Optional parameters:<pre>
* 'table' The name of the sessiondata table in 'database'. Default is
* 'horde_sessionhandler'.</pre>
*
* The table structure for the SessionHandler can be found in
* horde/scripts/sql/horde_sessionhandler.sapdb.sql.
*
* $Horde: framework/SessionHandler/SessionHandler/sapdb.php,v 1.13.12.8 2006/01/01 21:28:34 jan Exp $
*
* Copyright 2002-2006 Mike Cochrane <mike@graftonhall.co.nz>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Mike Cochrane <mike@graftonhall.co.nz>
* @since Horde 3.0
* @package Horde_SessionHandler
*/
class SessionHandler_sapdb extends SessionHandler_sql {
/**
* Constructs a new SQL SessionHandler object.
*
* @param array $params A hash containing connection parameters.
*/
function SessionHandler_sapdb($params = array())
{
$params['phptype'] = 'odbc';
parent::SessionHandler_sql($params);
}
/**
* Read the data for a particular session identifier from the
* SessionHandler backend.
*
* @param string $id The session identifier.
*
* @return string The session data.
*/
function read($id)
{
/* Make sure we have a valid database connection. */
$this->_connect();
/* Begin a transaction. */
$result = $this->_db->autocommit(false);
if (is_a($result, 'PEAR_Error')) {
Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
return '';
}
/* Build the SQL query. */
$query = sprintf('SELECT session_data FROM %s WHERE session_id = %s',
$this->_params['table'],
$this->_db->quote($id));
/* Log the query at a DEBUG log level. */
Horde::logMessage(sprintf('SQL Query by SessionHandler_sql::read(): query = "%s"', $query),
__FILE__, __LINE__, PEAR_LOG_DEBUG);
/* Execute the query */
$result = odbc_exec($this->_db->connection, $query);
odbc_longreadlen($result, 1048576);
/* Fetch the value */
odbc_fetch_row($result, 0);
$data = odbc_result($result, 'session_data');
/* Clean up */
odbc_free_result($result);
return $data;
}
}
|