/web/kaklik's_web/torrentflux/adodb/session/adodb-compress-bzip2.php |
---|
0,0 → 1,118 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
if (!function_exists('bzcompress')) { |
trigger_error('bzip2 functions are not available', E_USER_ERROR); |
return 0; |
} |
/* |
*/ |
class ADODB_Compress_Bzip2 { |
/** |
*/ |
var $_block_size = null; |
/** |
*/ |
var $_work_level = null; |
/** |
*/ |
var $_min_length = 1; |
/** |
*/ |
function getBlockSize() { |
return $this->_block_size; |
} |
/** |
*/ |
function setBlockSize($block_size) { |
assert('$block_size >= 1'); |
assert('$block_size <= 9'); |
$this->_block_size = (int) $block_size; |
} |
/** |
*/ |
function getWorkLevel() { |
return $this->_work_level; |
} |
/** |
*/ |
function setWorkLevel($work_level) { |
assert('$work_level >= 0'); |
assert('$work_level <= 250'); |
$this->_work_level = (int) $work_level; |
} |
/** |
*/ |
function getMinLength() { |
return $this->_min_length; |
} |
/** |
*/ |
function setMinLength($min_length) { |
assert('$min_length >= 0'); |
$this->_min_length = (int) $min_length; |
} |
/** |
*/ |
function ADODB_Compress_Bzip2($block_size = null, $work_level = null, $min_length = null) { |
if (!is_null($block_size)) { |
$this->setBlockSize($block_size); |
} |
if (!is_null($work_level)) { |
$this->setWorkLevel($work_level); |
} |
if (!is_null($min_length)) { |
$this->setMinLength($min_length); |
} |
} |
/** |
*/ |
function write($data, $key) { |
if (strlen($data) < $this->_min_length) { |
return $data; |
} |
if (!is_null($this->_block_size)) { |
if (!is_null($this->_work_level)) { |
return bzcompress($data, $this->_block_size, $this->_work_level); |
} else { |
return bzcompress($data, $this->_block_size); |
} |
} |
return bzcompress($data); |
} |
/** |
*/ |
function read($data, $key) { |
return $data ? bzdecompress($data) : $data; |
} |
} |
return 1; |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-compress-gzip.php |
---|
0,0 → 1,93 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
if (!function_exists('gzcompress')) { |
trigger_error('gzip functions are not available', E_USER_ERROR); |
return 0; |
} |
/* |
*/ |
class ADODB_Compress_Gzip { |
/** |
*/ |
var $_level = null; |
/** |
*/ |
var $_min_length = 1; |
/** |
*/ |
function getLevel() { |
return $this->_level; |
} |
/** |
*/ |
function setLevel($level) { |
assert('$level >= 0'); |
assert('$level <= 9'); |
$this->_level = (int) $level; |
} |
/** |
*/ |
function getMinLength() { |
return $this->_min_length; |
} |
/** |
*/ |
function setMinLength($min_length) { |
assert('$min_length >= 0'); |
$this->_min_length = (int) $min_length; |
} |
/** |
*/ |
function ADODB_Compress_Gzip($level = null, $min_length = null) { |
if (!is_null($level)) { |
$this->setLevel($level); |
} |
if (!is_null($min_length)) { |
$this->setMinLength($min_length); |
} |
} |
/** |
*/ |
function write($data, $key) { |
if (strlen($data) < $this->_min_length) { |
return $data; |
} |
if (!is_null($this->_level)) { |
return gzcompress($data, $this->_level); |
} else { |
return gzcompress($data); |
} |
} |
/** |
*/ |
function read($data, $key) { |
return $data ? gzuncompress($data) : $data; |
} |
} |
return 1; |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-cryptsession.php |
---|
0,0 → 1,24 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
/* |
This file is provided for backwards compatibility purposes |
*/ |
require_once dirname(__FILE__) . '/adodb-session.php'; |
require_once ADODB_SESSION . '/adodb-encrypt-md5.php'; |
ADODB_Session::filter(new ADODB_Encrypt_MD5()); |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-encrypt-mcrypt.php |
---|
0,0 → 1,109 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
if (!function_exists('mcrypt_encrypt')) { |
trigger_error('Mcrypt functions are not available', E_USER_ERROR); |
return 0; |
} |
/** |
*/ |
class ADODB_Encrypt_MCrypt { |
/** |
*/ |
var $_cipher; |
/** |
*/ |
var $_mode; |
/** |
*/ |
var $_source; |
/** |
*/ |
function getCipher() { |
return $this->_cipher; |
} |
/** |
*/ |
function setCipher($cipher) { |
$this->_cipher = $cipher; |
} |
/** |
*/ |
function getMode() { |
return $this->_mode; |
} |
/** |
*/ |
function setMode($mode) { |
$this->_mode = $mode; |
} |
/** |
*/ |
function getSource() { |
return $this->_source; |
} |
/** |
*/ |
function setSource($source) { |
$this->_source = $source; |
} |
/** |
*/ |
function ADODB_Encrypt_MCrypt($cipher = null, $mode = null, $source = null) { |
if (!$cipher) { |
$cipher = MCRYPT_RIJNDAEL_256; |
} |
if (!$mode) { |
$mode = MCRYPT_MODE_ECB; |
} |
if (!$source) { |
$source = MCRYPT_RAND; |
} |
$this->_cipher = $cipher; |
$this->_mode = $mode; |
$this->_source = $source; |
} |
/** |
*/ |
function write($data, $key) { |
$iv_size = mcrypt_get_iv_size($this->_cipher, $this->_mode); |
$iv = mcrypt_create_iv($iv_size, $this->_source); |
return mcrypt_encrypt($this->_cipher, $key, $data, $this->_mode, $iv); |
} |
/** |
*/ |
function read($data, $key) { |
$iv_size = mcrypt_get_iv_size($this->_cipher, $this->_mode); |
$iv = mcrypt_create_iv($iv_size, $this->_source); |
$rv = mcrypt_decrypt($this->_cipher, $key, $data, $this->_mode, $iv); |
return rtrim($rv, "\0"); |
} |
} |
return 1; |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-encrypt-md5.php |
---|
0,0 → 1,39 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
// security - hide paths |
if (!defined('ADODB_SESSION')) die(); |
include_once ADODB_SESSION . '/crypt.inc.php'; |
/** |
*/ |
class ADODB_Encrypt_MD5 { |
/** |
*/ |
function write($data, $key) { |
$md5crypt =& new MD5Crypt(); |
return $md5crypt->encrypt($data, $key); |
} |
/** |
*/ |
function read($data, $key) { |
$md5crypt =& new MD5Crypt(); |
return $md5crypt->decrypt($data, $key); |
} |
} |
return 1; |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-encrypt-secret.php |
---|
0,0 → 1,48 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
@define('HORDE_BASE', dirname(dirname(dirname(__FILE__))) . '/horde'); |
if (!is_dir(HORDE_BASE)) { |
trigger_error(sprintf('Directory not found: \'%s\'', HORDE_BASE), E_USER_ERROR); |
return 0; |
} |
include_once HORDE_BASE . '/lib/Horde.php'; |
include_once HORDE_BASE . '/lib/Secret.php'; |
/** |
NOTE: On Windows 2000 SP4 with PHP 4.3.1, MCrypt 2.4.x, and Apache 1.3.28, |
the session didn't work properly. |
This may be resolved with 4.3.3. |
*/ |
class ADODB_Encrypt_Secret { |
/** |
*/ |
function write($data, $key) { |
return Secret::write($key, $data); |
} |
/** |
*/ |
function read($data, $key) { |
return Secret::read($key, $data); |
} |
} |
return 1; |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-encrypt-sha1.php |
---|
0,0 → 1,32 |
<?php |
if (!defined('ADODB_SESSION')) die(); |
include_once ADODB_SESSION . '/crypt.inc.php'; |
/** |
*/ |
class ADODB_Encrypt_SHA1 { |
function write($data, $key) |
{ |
$sha1crypt =& new SHA1Crypt(); |
return $sha1crypt->encrypt($data, $key); |
} |
function read($data, $key) |
{ |
$sha1crypt =& new SHA1Crypt(); |
return $sha1crypt->decrypt($data, $key); |
} |
} |
return 1; |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-sess.txt |
---|
0,0 → 1,131 |
John, |
I have been an extremely satisfied ADODB user for several years now. |
To give you something back for all your hard work, I've spent the last 3 |
days rewriting the adodb-session.php code. |
---------- |
What's New |
---------- |
Here's a list of the new code's benefits: |
* Combines the functionality of the three files: |
adodb-session.php |
adodb-session-clob.php |
adodb-cryptsession.php |
each with very similar functionality, into a single file adodb-session.php. |
This will ease maintenance and support issues. |
* Supports multiple encryption and compression schemes. |
Currently, we support: |
MD5Crypt (crypt.inc.php) |
MCrypt |
Secure (Horde's emulation of MCrypt, if MCrypt module is not available.) |
GZip |
BZip2 |
These can be stacked, so if you want to compress and then encrypt your |
session data, it's easy. |
Also, the built-in MCrypt functions will be *much* faster, and more secure, |
than the MD5Crypt code. |
* adodb-session.php contains a single class ADODB_Session that encapsulates |
all functionality. |
This eliminates the use of global vars and defines (though they are |
supported for backwards compatibility). |
* All user defined parameters are now static functions in the ADODB_Session |
class. |
New parameters include: |
* encryptionKey(): Define the encryption key used to encrypt the session. |
Originally, it was a hard coded string. |
* persist(): Define if the database will be opened in persistent mode. |
Originally, the user had to call adodb_sess_open(). |
* dataFieldName(): Define the field name used to store the session data, as |
'DATA' appears to be a reserved word in the following cases: |
ANSI SQL |
IBM DB2 |
MS SQL Server |
Postgres |
SAP |
* filter(): Used to support multiple, simulataneous encryption/compression |
schemes. |
* Debug support is improved thru _rsdump() function, which is called after |
every database call. |
------------ |
What's Fixed |
------------ |
The new code includes several bug fixes and enhancements: |
* sesskey is compared in BINARY mode for MySQL, to avoid problems with |
session keys that differ only by case. |
Of course, the user should define the sesskey field as BINARY, to |
correctly fix this problem, otherwise performance will suffer. |
* In ADODB_Session::gc(), if $expire_notify is true, the multiple DELETES in |
the original code have been optimized to a single DELETE. |
* In ADODB_Session::destroy(), since "SELECT expireref, sesskey FROM $table |
WHERE sesskey = $qkey" will only return a single value, we don't loop on the |
result, we simply process the row, if any. |
* We close $rs after every use. |
--------------- |
What's the Same |
--------------- |
I know backwards compatibility is *very* important to you. Therefore, the |
new code is 100% backwards compatible. |
If you like my code, but don't "trust" it's backwards compatible, maybe we |
offer it as beta code, in a new directory for a release or two? |
------------ |
What's To Do |
------------ |
I've vascillated over whether to use a single function to get/set |
parameters: |
$user = ADODB_Session::user(); // get |
ADODB_Session::user($user); // set |
or to use separate functions (which is the PEAR/Java way): |
$user = ADODB_Session::getUser(); |
ADODB_Session::setUser($user); |
I've chosen the former as it's makes for a simpler API, and reduces the |
amount of code, but I'd be happy to change it to the latter. |
Also, do you think the class should be a singleton class, versus a static |
class? |
Let me know if you find this code useful, and will be including it in the |
next release of ADODB. |
If so, I will modify the current documentation to detail the new |
functionality. To that end, what file(s) contain the documentation? Please |
send them to me if they are not publically available. |
Also, if there is *anything* in the code that you like to see changed, let |
me know. |
Thanks, |
Ross |
/web/kaklik's_web/torrentflux/adodb/session/adodb-session-clob.php |
---|
0,0 → 1,23 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
/* |
This file is provided for backwards compatibility purposes |
*/ |
require_once dirname(__FILE__) . '/adodb-session.php'; |
ADODB_Session::clob('CLOB'); |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-session.php |
---|
0,0 → 1,917 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Contributed by Ross Smith (adodb@netebb.com). |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
*/ |
/* |
You may want to rename the 'data' field to 'session_data' as |
'data' appears to be a reserved word for one or more of the following: |
ANSI SQL |
IBM DB2 |
MS SQL Server |
Postgres |
SAP |
If you do, then execute: |
ADODB_Session::dataFieldName('session_data'); |
*/ |
if (!defined('_ADODB_LAYER')) { |
require_once realpath(dirname(__FILE__) . '/../adodb.inc.php'); |
} |
if (defined('ADODB_SESSION')) return 1; |
define('ADODB_SESSION', dirname(__FILE__)); |
/* |
Unserialize session data manually. See http://phplens.com/lens/lensforum/msgs.php?id=9821 |
From Kerr Schere, to unserialize session data stored via ADOdb. |
1. Pull the session data from the db and loop through it. |
2. Inside the loop, you will need to urldecode the data column. |
3. After urldecode, run the serialized string through this function: |
*/ |
function adodb_unserialize( $serialized_string ) |
{ |
$variables = array( ); |
$a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); |
for( $i = 0; $i < count( $a ); $i = $i+2 ) { |
$variables[$a[$i]] = unserialize( $a[$i+1] ); |
} |
return( $variables ); |
} |
/* |
Thanks Joe Li. See http://phplens.com/lens/lensforum/msgs.php?id=11487&x=1 |
Since adodb 4.61. |
*/ |
function adodb_session_regenerate_id() |
{ |
$conn =& ADODB_Session::_conn(); |
if (!$conn) return false; |
$old_id = session_id(); |
if (function_exists('session_regenerate_id')) { |
session_regenerate_id(); |
} else { |
session_id(md5(uniqid(rand(), true))); |
$ck = session_get_cookie_params(); |
setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']); |
//@session_start(); |
} |
$new_id = session_id(); |
$ok =& $conn->Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id)); |
/* it is possible that the update statement fails due to a collision */ |
if (!$ok) { |
session_id($old_id); |
if (empty($ck)) $ck = session_get_cookie_params(); |
setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']); |
return false; |
} |
return true; |
} |
/* |
Generate database table for session data |
@see http://phplens.com/lens/lensforum/msgs.php?id=12280 |
@return 0 if failure, 1 if errors, 2 if successful. |
@author Markus Staab http://www.public-4u.de |
*/ |
function adodb_session_create_table($schemaFile=null,$conn = null) |
{ |
// set default values |
if ($schemaFile===null) $schemaFile = ADODB_SESSION . '/session_schema.xml'; |
if ($conn===null) $conn =& ADODB_Session::_conn(); |
if (!$conn) return 0; |
$schema = new adoSchema($conn); |
$schema->ParseSchema($schemaFile); |
return $schema->ExecuteSchema(); |
} |
/*! |
\static |
*/ |
class ADODB_Session { |
///////////////////// |
// getter/setter methods |
///////////////////// |
/* |
function Lock($lock=null) |
{ |
static $_lock = false; |
if (!is_null($lock)) $_lock = $lock; |
return $lock; |
} |
*/ |
/*! |
*/ |
function driver($driver = null) { |
static $_driver = 'mysql'; |
static $set = false; |
if (!is_null($driver)) { |
$_driver = trim($driver); |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_DRIVER'])) { |
return $GLOBALS['ADODB_SESSION_DRIVER']; |
} |
} |
return $_driver; |
} |
/*! |
*/ |
function host($host = null) { |
static $_host = 'localhost'; |
static $set = false; |
if (!is_null($host)) { |
$_host = trim($host); |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_CONNECT'])) { |
return $GLOBALS['ADODB_SESSION_CONNECT']; |
} |
} |
return $_host; |
} |
/*! |
*/ |
function user($user = null) { |
static $_user = 'root'; |
static $set = false; |
if (!is_null($user)) { |
$_user = trim($user); |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_USER'])) { |
return $GLOBALS['ADODB_SESSION_USER']; |
} |
} |
return $_user; |
} |
/*! |
*/ |
function password($password = null) { |
static $_password = ''; |
static $set = false; |
if (!is_null($password)) { |
$_password = $password; |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_PWD'])) { |
return $GLOBALS['ADODB_SESSION_PWD']; |
} |
} |
return $_password; |
} |
/*! |
*/ |
function database($database = null) { |
static $_database = 'xphplens_2'; |
static $set = false; |
if (!is_null($database)) { |
$_database = trim($database); |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_DB'])) { |
return $GLOBALS['ADODB_SESSION_DB']; |
} |
} |
return $_database; |
} |
/*! |
*/ |
function persist($persist = null) |
{ |
static $_persist = true; |
if (!is_null($persist)) { |
$_persist = trim($persist); |
} |
return $_persist; |
} |
/*! |
*/ |
function lifetime($lifetime = null) { |
static $_lifetime; |
static $set = false; |
if (!is_null($lifetime)) { |
$_lifetime = (int) $lifetime; |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESS_LIFE'])) { |
return $GLOBALS['ADODB_SESS_LIFE']; |
} |
} |
if (!$_lifetime) { |
$_lifetime = ini_get('session.gc_maxlifetime'); |
if ($_lifetime <= 1) { |
// bug in PHP 4.0.3 pl 1 -- how about other versions? |
//print "<h3>Session Error: PHP.INI setting <i>session.gc_maxlifetime</i>not set: $lifetime</h3>"; |
$_lifetime = 1440; |
} |
} |
return $_lifetime; |
} |
/*! |
*/ |
function debug($debug = null) { |
static $_debug = false; |
static $set = false; |
if (!is_null($debug)) { |
$_debug = (bool) $debug; |
$conn = ADODB_Session::_conn(); |
if ($conn) { |
$conn->debug = $_debug; |
} |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESS_DEBUG'])) { |
return $GLOBALS['ADODB_SESS_DEBUG']; |
} |
} |
return $_debug; |
} |
/*! |
*/ |
function expireNotify($expire_notify = null) { |
static $_expire_notify; |
static $set = false; |
if (!is_null($expire_notify)) { |
$_expire_notify = $expire_notify; |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'])) { |
return $GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY']; |
} |
} |
return $_expire_notify; |
} |
/*! |
*/ |
function table($table = null) { |
static $_table = 'sessions'; |
static $set = false; |
if (!is_null($table)) { |
$_table = trim($table); |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_TBL'])) { |
return $GLOBALS['ADODB_SESSION_TBL']; |
} |
} |
return $_table; |
} |
/*! |
*/ |
function optimize($optimize = null) { |
static $_optimize = false; |
static $set = false; |
if (!is_null($optimize)) { |
$_optimize = (bool) $optimize; |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (defined('ADODB_SESSION_OPTIMIZE')) { |
return true; |
} |
} |
return $_optimize; |
} |
/*! |
*/ |
function syncSeconds($sync_seconds = null) { |
static $_sync_seconds = 60; |
static $set = false; |
if (!is_null($sync_seconds)) { |
$_sync_seconds = (int) $sync_seconds; |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (defined('ADODB_SESSION_SYNCH_SECS')) { |
return ADODB_SESSION_SYNCH_SECS; |
} |
} |
return $_sync_seconds; |
} |
/*! |
*/ |
function clob($clob = null) { |
static $_clob = false; |
static $set = false; |
if (!is_null($clob)) { |
$_clob = strtolower(trim($clob)); |
$set = true; |
} elseif (!$set) { |
// backwards compatibility |
if (isset($GLOBALS['ADODB_SESSION_USE_LOBS'])) { |
return $GLOBALS['ADODB_SESSION_USE_LOBS']; |
} |
} |
return $_clob; |
} |
/*! |
*/ |
function dataFieldName($data_field_name = null) { |
static $_data_field_name = 'data'; |
if (!is_null($data_field_name)) { |
$_data_field_name = trim($data_field_name); |
} |
return $_data_field_name; |
} |
/*! |
*/ |
function filter($filter = null) { |
static $_filter = array(); |
if (!is_null($filter)) { |
if (!is_array($filter)) { |
$filter = array($filter); |
} |
$_filter = $filter; |
} |
return $_filter; |
} |
/*! |
*/ |
function encryptionKey($encryption_key = null) { |
static $_encryption_key = 'CRYPTED ADODB SESSIONS ROCK!'; |
if (!is_null($encryption_key)) { |
$_encryption_key = $encryption_key; |
} |
return $_encryption_key; |
} |
///////////////////// |
// private methods |
///////////////////// |
/*! |
*/ |
function &_conn($conn=null) { |
return $GLOBALS['ADODB_SESS_CONN']; |
} |
/*! |
*/ |
function _crc($crc = null) { |
static $_crc = false; |
if (!is_null($crc)) { |
$_crc = $crc; |
} |
return $_crc; |
} |
/*! |
*/ |
function _init() { |
session_module_name('user'); |
session_set_save_handler( |
array('ADODB_Session', 'open'), |
array('ADODB_Session', 'close'), |
array('ADODB_Session', 'read'), |
array('ADODB_Session', 'write'), |
array('ADODB_Session', 'destroy'), |
array('ADODB_Session', 'gc') |
); |
} |
/*! |
*/ |
function _sessionKey() { |
// use this function to create the encryption key for crypted sessions |
// crypt the used key, ADODB_Session::encryptionKey() as key and session_id() as salt |
return crypt(ADODB_Session::encryptionKey(), session_id()); |
} |
/*! |
*/ |
function _dumprs($rs) { |
$conn =& ADODB_Session::_conn(); |
$debug = ADODB_Session::debug(); |
if (!$conn) { |
return; |
} |
if (!$debug) { |
return; |
} |
if (!$rs) { |
echo "<br />\$rs is null or false<br />\n"; |
return; |
} |
//echo "<br />\nAffected_Rows=",$conn->Affected_Rows(),"<br />\n"; |
if (!is_object($rs)) { |
return; |
} |
require_once ADODB_SESSION.'/../tohtml.inc.php'; |
rs2html($rs); |
} |
///////////////////// |
// public methods |
///////////////////// |
/*! |
Create the connection to the database. |
If $conn already exists, reuse that connection |
*/ |
function open($save_path, $session_name, $persist = null) { |
$conn =& ADODB_Session::_conn(); |
if ($conn) { |
return true; |
} |
$database = ADODB_Session::database(); |
$debug = ADODB_Session::debug(); |
$driver = ADODB_Session::driver(); |
$host = ADODB_Session::host(); |
$password = ADODB_Session::password(); |
$user = ADODB_Session::user(); |
if (!is_null($persist)) { |
ADODB_Session::persist($persist); |
} else { |
$persist = ADODB_Session::persist(); |
} |
# these can all be defaulted to in php.ini |
# assert('$database'); |
# assert('$driver'); |
# assert('$host'); |
// cannot use =& below - do not know why... |
$conn =& ADONewConnection($driver); |
if ($debug) { |
$conn->debug = true; |
// ADOConnection::outp( " driver=$driver user=$user pwd=$password db=$database "); |
} |
if ($persist) { |
switch($persist) { |
default: |
case 'P': $ok = $conn->PConnect($host, $user, $password, $database); break; |
case 'C': $ok = $conn->Connect($host, $user, $password, $database); break; |
case 'N': $ok = $conn->NConnect($host, $user, $password, $database); break; |
} |
} else { |
$ok = $conn->Connect($host, $user, $password, $database); |
} |
if ($ok) $GLOBALS['ADODB_SESS_CONN'] =& $conn; |
else |
ADOConnection::outp('<p>Session: connection failed</p>', false); |
return $ok; |
} |
/*! |
Close the connection |
*/ |
function close() { |
/* |
$conn =& ADODB_Session::_conn(); |
if ($conn) $conn->Close(); |
*/ |
return true; |
} |
/* |
Slurp in the session variables and return the serialized string |
*/ |
function read($key) { |
$conn =& ADODB_Session::_conn(); |
$data = ADODB_Session::dataFieldName(); |
$filter = ADODB_Session::filter(); |
$table = ADODB_Session::table(); |
if (!$conn) { |
return ''; |
} |
assert('$table'); |
$qkey = $conn->quote($key); |
$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; |
$sql = "SELECT $data FROM $table WHERE sesskey = $binary $qkey AND expiry >= " . time(); |
/* Lock code does not work as it needs to hold transaction within whole page, and we don't know if |
developer has commited elsewhere... :( |
*/ |
#if (ADODB_Session::Lock()) |
# $rs =& $conn->RowLock($table, "$binary sesskey = $qkey AND expiry >= " . time(), $data); |
#else |
$rs =& $conn->Execute($sql); |
//ADODB_Session::_dumprs($rs); |
if ($rs) { |
if ($rs->EOF) { |
$v = ''; |
} else { |
$v = reset($rs->fields); |
$filter = array_reverse($filter); |
foreach ($filter as $f) { |
if (is_object($f)) { |
$v = $f->read($v, ADODB_Session::_sessionKey()); |
} |
} |
$v = rawurldecode($v); |
} |
$rs->Close(); |
ADODB_Session::_crc(strlen($v) . crc32($v)); |
return $v; |
} |
return ''; |
} |
/*! |
Write the serialized data to a database. |
If the data has not been modified since the last read(), we do not write. |
*/ |
function write($key, $val) { |
$clob = ADODB_Session::clob(); |
$conn =& ADODB_Session::_conn(); |
$crc = ADODB_Session::_crc(); |
$data = ADODB_Session::dataFieldName(); |
$debug = ADODB_Session::debug(); |
$driver = ADODB_Session::driver(); |
$expire_notify = ADODB_Session::expireNotify(); |
$filter = ADODB_Session::filter(); |
$lifetime = ADODB_Session::lifetime(); |
$table = ADODB_Session::table(); |
if (!$conn) { |
return false; |
} |
$qkey = $conn->qstr($key); |
assert('$table'); |
$expiry = time() + $lifetime; |
$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; |
// crc32 optimization since adodb 2.1 |
// now we only update expiry date, thx to sebastian thom in adodb 2.32 |
if ($crc !== false && $crc == (strlen($val) . crc32($val))) { |
if ($debug) { |
echo '<p>Session: Only updating date - crc32 not changed</p>'; |
} |
$sql = "UPDATE $table SET expiry = ".$conn->Param('0')." WHERE $binary sesskey = ".$conn->Param('1')." AND expiry >= ".$conn->Param('2'); |
$rs =& $conn->Execute($sql,array($expiry,$key,time())); |
ADODB_Session::_dumprs($rs); |
if ($rs) { |
$rs->Close(); |
} |
return true; |
} |
$val = rawurlencode($val); |
foreach ($filter as $f) { |
if (is_object($f)) { |
$val = $f->write($val, ADODB_Session::_sessionKey()); |
} |
} |
$arr = array('sesskey' => $key, 'expiry' => $expiry, $data => $val, 'expireref' => ''); |
if ($expire_notify) { |
$var = reset($expire_notify); |
global $$var; |
if (isset($$var)) { |
$arr['expireref'] = $$var; |
} |
} |
if (!$clob) { // no lobs, simply use replace() |
$arr[$data] = $conn->qstr($val); |
$rs = $conn->Replace($table, $arr, 'sesskey', $autoQuote = true); |
ADODB_Session::_dumprs($rs); |
} else { |
// what value shall we insert/update for lob row? |
switch ($driver) { |
// empty_clob or empty_lob for oracle dbs |
case 'oracle': |
case 'oci8': |
case 'oci8po': |
case 'oci805': |
$lob_value = sprintf('empty_%s()', strtolower($clob)); |
break; |
// null for all other |
default: |
$lob_value = 'null'; |
break; |
} |
// do we insert or update? => as for sesskey |
$rs =& $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = $qkey"); |
ADODB_Session::_dumprs($rs); |
if ($rs && reset($rs->fields) > 0) { |
$sql = "UPDATE $table SET expiry = $expiry, $data = $lob_value WHERE sesskey = $qkey"; |
} else { |
$sql = "INSERT INTO $table (expiry, $data, sesskey) VALUES ($expiry, $lob_value, $qkey)"; |
} |
if ($rs) { |
$rs->Close(); |
} |
$err = ''; |
$rs1 =& $conn->Execute($sql); |
ADODB_Session::_dumprs($rs1); |
if (!$rs1) { |
$err = $conn->ErrorMsg()."\n"; |
} |
$rs2 =& $conn->UpdateBlob($table, $data, $val, " sesskey=$qkey", strtoupper($clob)); |
ADODB_Session::_dumprs($rs2); |
if (!$rs2) { |
$err .= $conn->ErrorMsg()."\n"; |
} |
$rs = ($rs && $rs2) ? true : false; |
if ($rs1) { |
$rs1->Close(); |
} |
if (is_object($rs2)) { |
$rs2->Close(); |
} |
} |
if (!$rs) { |
ADOConnection::outp('<p>Session Replace: ' . $conn->ErrorMsg() . '</p>', false); |
return false; |
} else { |
// bug in access driver (could be odbc?) means that info is not committed |
// properly unless select statement executed in Win2000 |
if ($conn->databaseType == 'access') { |
$sql = "SELECT sesskey FROM $table WHERE $binary sesskey = $qkey"; |
$rs =& $conn->Execute($sql); |
ADODB_Session::_dumprs($rs); |
if ($rs) { |
$rs->Close(); |
} |
} |
}/* |
if (ADODB_Session::Lock()) { |
$conn->CommitTrans(); |
}*/ |
return $rs ? true : false; |
} |
/*! |
*/ |
function destroy($key) { |
$conn =& ADODB_Session::_conn(); |
$table = ADODB_Session::table(); |
$expire_notify = ADODB_Session::expireNotify(); |
if (!$conn) { |
return false; |
} |
assert('$table'); |
$qkey = $conn->quote($key); |
$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; |
if ($expire_notify) { |
reset($expire_notify); |
$fn = next($expire_notify); |
$savem = $conn->SetFetchMode(ADODB_FETCH_NUM); |
$sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey"; |
$rs =& $conn->Execute($sql); |
ADODB_Session::_dumprs($rs); |
$conn->SetFetchMode($savem); |
if (!$rs) { |
return false; |
} |
if (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
//assert('$ref'); |
//assert('$key'); |
$fn($ref, $key); |
} |
$rs->Close(); |
} |
$sql = "DELETE FROM $table WHERE $binary sesskey = $qkey"; |
$rs =& $conn->Execute($sql); |
ADODB_Session::_dumprs($rs); |
if ($rs) { |
$rs->Close(); |
} |
return $rs ? true : false; |
} |
/*! |
*/ |
function gc($maxlifetime) { |
$conn =& ADODB_Session::_conn(); |
$debug = ADODB_Session::debug(); |
$expire_notify = ADODB_Session::expireNotify(); |
$optimize = ADODB_Session::optimize(); |
$sync_seconds = ADODB_Session::syncSeconds(); |
$table = ADODB_Session::table(); |
if (!$conn) { |
return false; |
} |
assert('$table'); |
$time = time(); |
$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : ''; |
if ($expire_notify) { |
reset($expire_notify); |
$fn = next($expire_notify); |
$savem = $conn->SetFetchMode(ADODB_FETCH_NUM); |
$sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time"; |
$rs =& $conn->Execute($sql); |
ADODB_Session::_dumprs($rs); |
$conn->SetFetchMode($savem); |
if ($rs) { |
$conn->BeginTrans(); |
$keys = array(); |
while (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
$fn($ref, $key); |
$del = $conn->Execute("DELETE FROM $table WHERE sesskey='$key'"); |
$rs->MoveNext(); |
} |
$rs->Close(); |
$conn->CommitTrans(); |
} |
} else { |
if (1) { |
$sql = "SELECT sesskey FROM $table WHERE expiry < $time"; |
$arr =& $conn->GetAll($sql); |
foreach ($arr as $row) { |
$sql2 = "DELETE FROM $table WHERE sesskey='$row[0]'"; |
$conn->Execute($sql2); |
} |
} else { |
$sql = "DELETE FROM $table WHERE expiry < $time"; |
$rs =& $conn->Execute($sql); |
ADODB_Session::_dumprs($rs); |
if ($rs) $rs->Close(); |
} |
if ($debug) { |
ADOConnection::outp("<p><b>Garbage Collection</b>: $sql</p>"); |
} |
} |
// suggested by Cameron, "GaM3R" <gamr@outworld.cx> |
if ($optimize) { |
$driver = ADODB_Session::driver(); |
if (preg_match('/mysql/i', $driver)) { |
$sql = "OPTIMIZE TABLE $table"; |
} |
if (preg_match('/postgres/i', $driver)) { |
$sql = "VACUUM $table"; |
} |
if (!empty($sql)) { |
$conn->Execute($sql); |
} |
} |
if ($sync_seconds) { |
$sql = 'SELECT '; |
if ($conn->dataProvider === 'oci8') { |
$sql .= "TO_CHAR({$conn->sysTimeStamp}, 'RRRR-MM-DD HH24:MI:SS')"; |
} else { |
$sql .= $conn->sysTimeStamp; |
} |
$sql .= " FROM $table"; |
$rs =& $conn->SelectLimit($sql, 1); |
if ($rs && !$rs->EOF) { |
$dbts = reset($rs->fields); |
$rs->Close(); |
$dbt = $conn->UnixTimeStamp($dbts); |
$t = time(); |
if (abs($dbt - $t) >= $sync_seconds) { |
$msg = __FILE__ . |
": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: " . |
" database=$dbt ($dbts), webserver=$t (diff=". (abs($dbt - $t) / 60) . ' minutes)'; |
error_log($msg); |
if ($debug) { |
ADOConnection::outp("<p>$msg</p>"); |
} |
} |
} |
} |
return true; |
} |
} |
ADODB_Session::_init(); |
register_shutdown_function('session_write_close'); |
// for backwards compatability only |
function adodb_sess_open($save_path, $session_name, $persist = true) { |
return ADODB_Session::open($save_path, $session_name, $persist); |
} |
// for backwards compatability only |
function adodb_sess_gc($t) |
{ |
return ADODB_Session::gc($t); |
} |
?> |
/web/kaklik's_web/torrentflux/adodb/session/adodb-sessions.mysql.sql |
---|
0,0 → 1,16 |
-- $CVSHeader$ |
CREATE DATABASE /*! IF NOT EXISTS */ adodb_sessions; |
USE adodb_sessions; |
DROP TABLE /*! IF EXISTS */ sessions; |
CREATE TABLE /*! IF NOT EXISTS */ sessions ( |
sesskey CHAR(32) /*! BINARY */ NOT NULL DEFAULT '', |
expiry INT(11) /*! UNSIGNED */ NOT NULL DEFAULT 0, |
expireref VARCHAR(64) DEFAULT '', |
data LONGTEXT DEFAULT '', |
PRIMARY KEY (sesskey), |
INDEX expiry (expiry) |
); |
/web/kaklik's_web/torrentflux/adodb/session/adodb-sessions.oracle.clob.sql |
---|
0,0 → 1,15 |
-- $CVSHeader$ |
DROP TABLE adodb_sessions; |
CREATE TABLE sessions ( |
sesskey CHAR(32) DEFAULT '' NOT NULL, |
expiry INT DEFAULT 0 NOT NULL, |
expireref VARCHAR(64) DEFAULT '', |
data CLOB DEFAULT '', |
PRIMARY KEY (sesskey) |
); |
CREATE INDEX ix_expiry ON sessions (expiry); |
QUIT; |
/web/kaklik's_web/torrentflux/adodb/session/adodb-sessions.oracle.sql |
---|
0,0 → 1,16 |
-- $CVSHeader$ |
DROP TABLE adodb_sessions; |
CREATE TABLE sessions ( |
sesskey CHAR(32) DEFAULT '' NOT NULL, |
expiry INT DEFAULT 0 NOT NULL, |
expireref VARCHAR(64) DEFAULT '', |
data VARCHAR(4000) DEFAULT '', |
PRIMARY KEY (sesskey), |
INDEX expiry (expiry) |
); |
CREATE INDEX ix_expiry ON sessions (expiry); |
QUIT; |
/web/kaklik's_web/torrentflux/adodb/session/crypt.inc.php |
---|
0,0 → 1,161 |
<?php |
// Session Encryption by Ari Kuorikoski <ari.kuorikoski@finebyte.com> |
class MD5Crypt{ |
function keyED($txt,$encrypt_key) |
{ |
$encrypt_key = md5($encrypt_key); |
$ctr=0; |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++){ |
if ($ctr==strlen($encrypt_key)) $ctr=0; |
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1); |
$ctr++; |
} |
return $tmp; |
} |
function Encrypt($txt,$key) |
{ |
srand((double)microtime()*1000000); |
$encrypt_key = md5(rand(0,32000)); |
$ctr=0; |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++) |
{ |
if ($ctr==strlen($encrypt_key)) $ctr=0; |
$tmp.= substr($encrypt_key,$ctr,1) . |
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1)); |
$ctr++; |
} |
return base64_encode($this->keyED($tmp,$key)); |
} |
function Decrypt($txt,$key) |
{ |
$txt = $this->keyED(base64_decode($txt),$key); |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++){ |
$md5 = substr($txt,$i,1); |
$i++; |
$tmp.= (substr($txt,$i,1) ^ $md5); |
} |
return $tmp; |
} |
function RandPass() |
{ |
$randomPassword = ""; |
srand((double)microtime()*1000000); |
for($i=0;$i<8;$i++) |
{ |
$randnumber = rand(48,120); |
while (($randnumber >= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96)) |
{ |
$randnumber = rand(48,120); |
} |
$randomPassword .= chr($randnumber); |
} |
return $randomPassword; |
} |
} |
class SHA1Crypt{ |
function keyED($txt,$encrypt_key) |
{ |
$encrypt_key = sha1($encrypt_key); |
$ctr=0; |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++){ |
if ($ctr==strlen($encrypt_key)) $ctr=0; |
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1); |
$ctr++; |
} |
return $tmp; |
} |
function Encrypt($txt,$key) |
{ |
srand((double)microtime()*1000000); |
$encrypt_key = sha1(rand(0,32000)); |
$ctr=0; |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++) |
{ |
if ($ctr==strlen($encrypt_key)) $ctr=0; |
$tmp.= substr($encrypt_key,$ctr,1) . |
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1)); |
$ctr++; |
} |
return base64_encode($this->keyED($tmp,$key)); |
} |
function Decrypt($txt,$key) |
{ |
$txt = $this->keyED(base64_decode($txt),$key); |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++){ |
$sha1 = substr($txt,$i,1); |
$i++; |
$tmp.= (substr($txt,$i,1) ^ $sha1); |
} |
return $tmp; |
} |
function RandPass() |
{ |
$randomPassword = ""; |
srand((double)microtime()*1000000); |
for($i=0;$i<8;$i++) |
{ |
$randnumber = rand(48,120); |
while (($randnumber >= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96)) |
{ |
$randnumber = rand(48,120); |
} |
$randomPassword .= chr($randnumber); |
} |
return $randomPassword; |
} |
} |
?> |
/web/kaklik's_web/torrentflux/adodb/session/old/adodb-cryptsession.php |
---|
0,0 → 1,324 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Made table name configurable - by David Johnson djohnson@inpro.net |
Encryption by Ari Kuorikoski <ari.kuorikoski@finebyte.com> |
Set tabs to 4 for best viewing. |
Latest version of ADODB is available at http://php.weblogs.com/adodb |
====================================================================== |
This file provides PHP4 session management using the ADODB database |
wrapper library. |
Example |
======= |
include('adodb.inc.php'); |
#---------------------------------# |
include('adodb-cryptsession.php'); |
#---------------------------------# |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
print " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>"; |
Installation |
============ |
1. Create a new database in MySQL or Access "sessions" like |
so: |
create table sessions ( |
SESSKEY char(32) not null, |
EXPIRY int(11) unsigned not null, |
EXPIREREF varchar(64), |
DATA CLOB, |
primary key (sesskey) |
); |
2. Then define the following parameters. You can either modify |
this file, or define them before this file is included: |
$ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase'; |
$ADODB_SESSION_CONNECT='server to connect to'; |
$ADODB_SESSION_USER ='user'; |
$ADODB_SESSION_PWD ='password'; |
$ADODB_SESSION_DB ='database'; |
$ADODB_SESSION_TBL = 'sessions' |
3. Recommended is PHP 4.0.2 or later. There are documented |
session bugs in earlier versions of PHP. |
*/ |
include_once('crypt.inc.php'); |
if (!defined('_ADODB_LAYER')) { |
include (dirname(__FILE__).'/adodb.inc.php'); |
} |
/* if database time and system time is difference is greater than this, then give warning */ |
define('ADODB_SESSION_SYNCH_SECS',60); |
if (!defined('ADODB_SESSION')) { |
define('ADODB_SESSION',1); |
GLOBAL $ADODB_SESSION_CONNECT, |
$ADODB_SESSION_DRIVER, |
$ADODB_SESSION_USER, |
$ADODB_SESSION_PWD, |
$ADODB_SESSION_DB, |
$ADODB_SESS_CONN, |
$ADODB_SESS_LIFE, |
$ADODB_SESS_DEBUG, |
$ADODB_SESS_INSERT, |
$ADODB_SESSION_EXPIRE_NOTIFY, |
$ADODB_SESSION_TBL; |
//$ADODB_SESS_DEBUG = true; |
/* SET THE FOLLOWING PARAMETERS */ |
if (empty($ADODB_SESSION_DRIVER)) { |
$ADODB_SESSION_DRIVER='mysql'; |
$ADODB_SESSION_CONNECT='localhost'; |
$ADODB_SESSION_USER ='root'; |
$ADODB_SESSION_PWD =''; |
$ADODB_SESSION_DB ='xphplens_2'; |
} |
if (empty($ADODB_SESSION_TBL)){ |
$ADODB_SESSION_TBL = 'sessions'; |
} |
if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) { |
$ADODB_SESSION_EXPIRE_NOTIFY = false; |
} |
function ADODB_Session_Key() |
{ |
$ADODB_CRYPT_KEY = 'CRYPTED ADODB SESSIONS ROCK!'; |
/* USE THIS FUNCTION TO CREATE THE ENCRYPTION KEY FOR CRYPTED SESSIONS */ |
/* Crypt the used key, $ADODB_CRYPT_KEY as key and session_ID as SALT */ |
return crypt($ADODB_CRYPT_KEY, session_ID()); |
} |
$ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime'); |
if ($ADODB_SESS_LIFE <= 1) { |
// bug in PHP 4.0.3 pl 1 -- how about other versions? |
//print "<h3>Session Error: PHP.INI setting <i>session.gc_maxlifetime</i>not set: $ADODB_SESS_LIFE</h3>"; |
$ADODB_SESS_LIFE=1440; |
} |
function adodb_sess_open($save_path, $session_name) |
{ |
GLOBAL $ADODB_SESSION_CONNECT, |
$ADODB_SESSION_DRIVER, |
$ADODB_SESSION_USER, |
$ADODB_SESSION_PWD, |
$ADODB_SESSION_DB, |
$ADODB_SESS_CONN, |
$ADODB_SESS_DEBUG; |
$ADODB_SESS_INSERT = false; |
if (isset($ADODB_SESS_CONN)) return true; |
$ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER); |
if (!empty($ADODB_SESS_DEBUG)) { |
$ADODB_SESS_CONN->debug = true; |
print" conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB "; |
} |
return $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT, |
$ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); |
} |
function adodb_sess_close() |
{ |
global $ADODB_SESS_CONN; |
if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); |
return true; |
} |
function adodb_sess_read($key) |
{ |
$Crypt = new MD5Crypt; |
global $ADODB_SESS_CONN,$ADODB_SESS_INSERT,$ADODB_SESSION_TBL; |
$rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time()); |
if ($rs) { |
if ($rs->EOF) { |
$ADODB_SESS_INSERT = true; |
$v = ''; |
} else { |
// Decrypt session data |
$v = rawurldecode($Crypt->Decrypt(reset($rs->fields), ADODB_Session_Key())); |
} |
$rs->Close(); |
return $v; |
} |
else $ADODB_SESS_INSERT = true; |
return ''; |
} |
function adodb_sess_write($key, $val) |
{ |
$Crypt = new MD5Crypt; |
global $ADODB_SESS_INSERT,$ADODB_SESS_CONN, $ADODB_SESS_LIFE, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; |
$expiry = time() + $ADODB_SESS_LIFE; |
// encrypt session data.. |
$val = $Crypt->Encrypt(rawurlencode($val), ADODB_Session_Key()); |
$arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val); |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
$var = reset($ADODB_SESSION_EXPIRE_NOTIFY); |
global $$var; |
$arr['expireref'] = $$var; |
} |
$rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL, |
$arr, |
'sesskey',$autoQuote = true); |
if (!$rs) { |
ADOConnection::outp( ' |
-- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().'</p>',false); |
} else { |
// bug in access driver (could be odbc?) means that info is not commited |
// properly unless select statement executed in Win2000 |
if ($ADODB_SESS_CONN->databaseType == 'access') $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
} |
return isset($rs); |
} |
function adodb_sess_destroy($key) |
{ |
global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
reset($ADODB_SESSION_EXPIRE_NOTIFY); |
$fn = next($ADODB_SESSION_EXPIRE_NOTIFY); |
$savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); |
$rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$ADODB_SESS_CONN->SetFetchMode($savem); |
if ($rs) { |
$ADODB_SESS_CONN->BeginTrans(); |
while (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
$fn($ref,$key); |
$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$rs->MoveNext(); |
} |
$ADODB_SESS_CONN->CommitTrans(); |
} |
} else { |
$qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'"; |
$rs = $ADODB_SESS_CONN->Execute($qry); |
} |
return $rs ? true : false; |
} |
function adodb_sess_gc($maxlifetime) { |
global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY,$ADODB_SESS_DEBUG; |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
reset($ADODB_SESSION_EXPIRE_NOTIFY); |
$fn = next($ADODB_SESSION_EXPIRE_NOTIFY); |
$savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); |
$t = time(); |
$rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t"); |
$ADODB_SESS_CONN->SetFetchMode($savem); |
if ($rs) { |
$ADODB_SESS_CONN->BeginTrans(); |
while (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
$fn($ref,$key); |
//$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$rs->MoveNext(); |
} |
$rs->Close(); |
$ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < $t"); |
$ADODB_SESS_CONN->CommitTrans(); |
} |
} else { |
$qry = "DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time(); |
$ADODB_SESS_CONN->Execute($qry); |
} |
// suggested by Cameron, "GaM3R" <gamr@outworld.cx> |
if (defined('ADODB_SESSION_OPTIMIZE')) |
{ |
global $ADODB_SESSION_DRIVER; |
switch( $ADODB_SESSION_DRIVER ) { |
case 'mysql': |
case 'mysqlt': |
$opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL; |
break; |
case 'postgresql': |
case 'postgresql7': |
$opt_qry = 'VACUUM '.$ADODB_SESSION_TBL; |
break; |
} |
} |
if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL; |
else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL; |
$rs =& $ADODB_SESS_CONN->SelectLimit($sql,1); |
if ($rs && !$rs->EOF) { |
$dbts = reset($rs->fields); |
$rs->Close(); |
$dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts); |
$t = time(); |
if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) { |
$msg = |
__FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)"; |
error_log($msg); |
if ($ADODB_SESS_DEBUG) ADOConnection::outp(" |
-- $msg</p>"); |
} |
} |
return true; |
} |
session_module_name('user'); |
session_set_save_handler( |
"adodb_sess_open", |
"adodb_sess_close", |
"adodb_sess_read", |
"adodb_sess_write", |
"adodb_sess_destroy", |
"adodb_sess_gc"); |
} |
/* TEST SCRIPT -- UNCOMMENT */ |
/* |
if (0) { |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
print " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>"; |
} |
*/ |
?> |
/web/kaklik's_web/torrentflux/adodb/session/old/adodb-session-clob.php |
---|
0,0 → 1,448 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
Latest version of ADODB is available at http://php.weblogs.com/adodb |
====================================================================== |
This file provides PHP4 session management using the ADODB database |
wrapper library, using Oracle CLOB's to store data. Contributed by achim.gosse@ddd.de. |
Example |
======= |
include('adodb.inc.php'); |
include('adodb-session.php'); |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
print " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>"; |
To force non-persistent connections, call adodb_session_open first before session_start(): |
include('adodb.inc.php'); |
include('adodb-session.php'); |
adodb_session_open(false,false,false); |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
print " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>"; |
Installation |
============ |
1. Create this table in your database (syntax might vary depending on your db): |
create table sessions ( |
SESSKEY char(32) not null, |
EXPIRY int(11) unsigned not null, |
EXPIREREF varchar(64), |
DATA CLOB, |
primary key (sesskey) |
); |
2. Then define the following parameters in this file: |
$ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase'; |
$ADODB_SESSION_CONNECT='server to connect to'; |
$ADODB_SESSION_USER ='user'; |
$ADODB_SESSION_PWD ='password'; |
$ADODB_SESSION_DB ='database'; |
$ADODB_SESSION_TBL = 'sessions' |
$ADODB_SESSION_USE_LOBS = false; (or, if you wanna use CLOBS (= 'CLOB') or ( = 'BLOB') |
3. Recommended is PHP 4.1.0 or later. There are documented |
session bugs in earlier versions of PHP. |
4. If you want to receive notifications when a session expires, then |
you can tag a session with an EXPIREREF, and before the session |
record is deleted, we can call a function that will pass the EXPIREREF |
as the first parameter, and the session key as the second parameter. |
To do this, define a notification function, say NotifyFn: |
function NotifyFn($expireref, $sesskey) |
{ |
} |
Then you need to define a global variable $ADODB_SESSION_EXPIRE_NOTIFY. |
This is an array with 2 elements, the first being the name of the variable |
you would like to store in the EXPIREREF field, and the 2nd is the |
notification function's name. |
In this example, we want to be notified when a user's session |
has expired, so we store the user id in the global variable $USERID, |
store this value in the EXPIREREF field: |
$ADODB_SESSION_EXPIRE_NOTIFY = array('USERID','NotifyFn'); |
Then when the NotifyFn is called, we are passed the $USERID as the first |
parameter, eg. NotifyFn($userid, $sesskey). |
*/ |
if (!defined('_ADODB_LAYER')) { |
include (dirname(__FILE__).'/adodb.inc.php'); |
} |
if (!defined('ADODB_SESSION')) { |
define('ADODB_SESSION',1); |
/* if database time and system time is difference is greater than this, then give warning */ |
define('ADODB_SESSION_SYNCH_SECS',60); |
/****************************************************************************************\ |
Global definitions |
\****************************************************************************************/ |
GLOBAL $ADODB_SESSION_CONNECT, |
$ADODB_SESSION_DRIVER, |
$ADODB_SESSION_USER, |
$ADODB_SESSION_PWD, |
$ADODB_SESSION_DB, |
$ADODB_SESS_CONN, |
$ADODB_SESS_LIFE, |
$ADODB_SESS_DEBUG, |
$ADODB_SESSION_EXPIRE_NOTIFY, |
$ADODB_SESSION_CRC, |
$ADODB_SESSION_USE_LOBS, |
$ADODB_SESSION_TBL; |
if (!isset($ADODB_SESSION_USE_LOBS)) $ADODB_SESSION_USE_LOBS = 'CLOB'; |
$ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime'); |
if ($ADODB_SESS_LIFE <= 1) { |
// bug in PHP 4.0.3 pl 1 -- how about other versions? |
//print "<h3>Session Error: PHP.INI setting <i>session.gc_maxlifetime</i>not set: $ADODB_SESS_LIFE</h3>"; |
$ADODB_SESS_LIFE=1440; |
} |
$ADODB_SESSION_CRC = false; |
//$ADODB_SESS_DEBUG = true; |
////////////////////////////////// |
/* SET THE FOLLOWING PARAMETERS */ |
////////////////////////////////// |
if (empty($ADODB_SESSION_DRIVER)) { |
$ADODB_SESSION_DRIVER='mysql'; |
$ADODB_SESSION_CONNECT='localhost'; |
$ADODB_SESSION_USER ='root'; |
$ADODB_SESSION_PWD =''; |
$ADODB_SESSION_DB ='xphplens_2'; |
} |
if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) { |
$ADODB_SESSION_EXPIRE_NOTIFY = false; |
} |
// Made table name configurable - by David Johnson djohnson@inpro.net |
if (empty($ADODB_SESSION_TBL)){ |
$ADODB_SESSION_TBL = 'sessions'; |
} |
// defaulting $ADODB_SESSION_USE_LOBS |
if (!isset($ADODB_SESSION_USE_LOBS) || empty($ADODB_SESSION_USE_LOBS)) { |
$ADODB_SESSION_USE_LOBS = false; |
} |
/* |
$ADODB_SESS['driver'] = $ADODB_SESSION_DRIVER; |
$ADODB_SESS['connect'] = $ADODB_SESSION_CONNECT; |
$ADODB_SESS['user'] = $ADODB_SESSION_USER; |
$ADODB_SESS['pwd'] = $ADODB_SESSION_PWD; |
$ADODB_SESS['db'] = $ADODB_SESSION_DB; |
$ADODB_SESS['life'] = $ADODB_SESS_LIFE; |
$ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; |
$ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; |
$ADODB_SESS['table'] = $ADODB_SESS_TBL; |
*/ |
/****************************************************************************************\ |
Create the connection to the database. |
If $ADODB_SESS_CONN already exists, reuse that connection |
\****************************************************************************************/ |
function adodb_sess_open($save_path, $session_name,$persist=true) |
{ |
GLOBAL $ADODB_SESS_CONN; |
if (isset($ADODB_SESS_CONN)) return true; |
GLOBAL $ADODB_SESSION_CONNECT, |
$ADODB_SESSION_DRIVER, |
$ADODB_SESSION_USER, |
$ADODB_SESSION_PWD, |
$ADODB_SESSION_DB, |
$ADODB_SESS_DEBUG; |
// cannot use & below - do not know why... |
$ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER); |
if (!empty($ADODB_SESS_DEBUG)) { |
$ADODB_SESS_CONN->debug = true; |
ADOConnection::outp( " conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB "); |
} |
if ($persist) $ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT, |
$ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); |
else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT, |
$ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); |
if (!$ok) ADOConnection::outp( " |
-- Session: connection failed</p>",false); |
} |
/****************************************************************************************\ |
Close the connection |
\****************************************************************************************/ |
function adodb_sess_close() |
{ |
global $ADODB_SESS_CONN; |
if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); |
return true; |
} |
/****************************************************************************************\ |
Slurp in the session variables and return the serialized string |
\****************************************************************************************/ |
function adodb_sess_read($key) |
{ |
global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC; |
$rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time()); |
if ($rs) { |
if ($rs->EOF) { |
$v = ''; |
} else |
$v = rawurldecode(reset($rs->fields)); |
$rs->Close(); |
// new optimization adodb 2.1 |
$ADODB_SESSION_CRC = strlen($v).crc32($v); |
return $v; |
} |
return ''; // thx to Jorma Tuomainen, webmaster#wizactive.com |
} |
/****************************************************************************************\ |
Write the serialized data to a database. |
If the data has not been modified since adodb_sess_read(), we do not write. |
\****************************************************************************************/ |
function adodb_sess_write($key, $val) |
{ |
global |
$ADODB_SESS_CONN, |
$ADODB_SESS_LIFE, |
$ADODB_SESSION_TBL, |
$ADODB_SESS_DEBUG, |
$ADODB_SESSION_CRC, |
$ADODB_SESSION_EXPIRE_NOTIFY, |
$ADODB_SESSION_DRIVER, // added |
$ADODB_SESSION_USE_LOBS; // added |
$expiry = time() + $ADODB_SESS_LIFE; |
// crc32 optimization since adodb 2.1 |
// now we only update expiry date, thx to sebastian thom in adodb 2.32 |
if ($ADODB_SESSION_CRC !== false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) { |
if ($ADODB_SESS_DEBUG) echo " |
-- Session: Only updating date - crc32 not changed</p>"; |
$qry = "UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time(); |
$rs = $ADODB_SESS_CONN->Execute($qry); |
return true; |
} |
$val = rawurlencode($val); |
$arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val); |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
$var = reset($ADODB_SESSION_EXPIRE_NOTIFY); |
global $$var; |
$arr['expireref'] = $$var; |
} |
if ($ADODB_SESSION_USE_LOBS === false) { // no lobs, simply use replace() |
$rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr, 'sesskey',$autoQuote = true); |
if (!$rs) { |
$err = $ADODB_SESS_CONN->ErrorMsg(); |
} |
} else { |
// what value shall we insert/update for lob row? |
switch ($ADODB_SESSION_DRIVER) { |
// empty_clob or empty_lob for oracle dbs |
case "oracle": |
case "oci8": |
case "oci8po": |
case "oci805": |
$lob_value = sprintf("empty_%s()", strtolower($ADODB_SESSION_USE_LOBS)); |
break; |
// null for all other |
default: |
$lob_value = "null"; |
break; |
} |
// do we insert or update? => as for sesskey |
$res = $ADODB_SESS_CONN->Execute("select count(*) as cnt from $ADODB_SESSION_TBL where sesskey = '$key'"); |
if ($res && reset($res->fields) > 0) { |
$qry = sprintf("update %s set expiry = %d, data = %s where sesskey = '%s'", $ADODB_SESSION_TBL, $expiry, $lob_value, $key); |
} else { |
// insert |
$qry = sprintf("insert into %s (sesskey, expiry, data) values ('%s', %d, %s)", $ADODB_SESSION_TBL, $key, $expiry, $lob_value); |
} |
$err = ""; |
$rs1 = $ADODB_SESS_CONN->Execute($qry); |
if (!$rs1) { |
$err .= $ADODB_SESS_CONN->ErrorMsg()."\n"; |
} |
$rs2 = $ADODB_SESS_CONN->UpdateBlob($ADODB_SESSION_TBL, 'data', $val, "sesskey='$key'", strtoupper($ADODB_SESSION_USE_LOBS)); |
if (!$rs2) { |
$err .= $ADODB_SESS_CONN->ErrorMsg()."\n"; |
} |
$rs = ($rs1 && $rs2) ? true : false; |
} |
if (!$rs) { |
ADOConnection::outp( ' |
-- Session Replace: '.nl2br($err).'</p>',false); |
} else { |
// bug in access driver (could be odbc?) means that info is not commited |
// properly unless select statement executed in Win2000 |
if ($ADODB_SESS_CONN->databaseType == 'access') |
$rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
} |
return !empty($rs); |
} |
function adodb_sess_destroy($key) |
{ |
global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
reset($ADODB_SESSION_EXPIRE_NOTIFY); |
$fn = next($ADODB_SESSION_EXPIRE_NOTIFY); |
$savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); |
$rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$ADODB_SESS_CONN->SetFetchMode($savem); |
if ($rs) { |
$ADODB_SESS_CONN->BeginTrans(); |
while (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
$fn($ref,$key); |
$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$rs->MoveNext(); |
} |
$ADODB_SESS_CONN->CommitTrans(); |
} |
} else { |
$qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'"; |
$rs = $ADODB_SESS_CONN->Execute($qry); |
} |
return $rs ? true : false; |
} |
function adodb_sess_gc($maxlifetime) |
{ |
global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
reset($ADODB_SESSION_EXPIRE_NOTIFY); |
$fn = next($ADODB_SESSION_EXPIRE_NOTIFY); |
$savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); |
$t = time(); |
$rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t"); |
$ADODB_SESS_CONN->SetFetchMode($savem); |
if ($rs) { |
$ADODB_SESS_CONN->BeginTrans(); |
while (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
$fn($ref,$key); |
$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$rs->MoveNext(); |
} |
$rs->Close(); |
//$ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < $t"); |
$ADODB_SESS_CONN->CommitTrans(); |
} |
} else { |
$ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time()); |
if ($ADODB_SESS_DEBUG) ADOConnection::outp(" |
-- <b>Garbage Collection</b>: $qry</p>"); |
} |
// suggested by Cameron, "GaM3R" <gamr@outworld.cx> |
if (defined('ADODB_SESSION_OPTIMIZE')) { |
global $ADODB_SESSION_DRIVER; |
switch( $ADODB_SESSION_DRIVER ) { |
case 'mysql': |
case 'mysqlt': |
$opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL; |
break; |
case 'postgresql': |
case 'postgresql7': |
$opt_qry = 'VACUUM '.$ADODB_SESSION_TBL; |
break; |
} |
if (!empty($opt_qry)) { |
$ADODB_SESS_CONN->Execute($opt_qry); |
} |
} |
if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL; |
else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL; |
$rs =& $ADODB_SESS_CONN->SelectLimit($sql,1); |
if ($rs && !$rs->EOF) { |
$dbts = reset($rs->fields); |
$rs->Close(); |
$dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts); |
$t = time(); |
if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) { |
$msg = |
__FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)"; |
error_log($msg); |
if ($ADODB_SESS_DEBUG) ADOConnection::outp(" |
-- $msg</p>"); |
} |
} |
return true; |
} |
session_module_name('user'); |
session_set_save_handler( |
"adodb_sess_open", |
"adodb_sess_close", |
"adodb_sess_read", |
"adodb_sess_write", |
"adodb_sess_destroy", |
"adodb_sess_gc"); |
} |
/* TEST SCRIPT -- UNCOMMENT */ |
if (0) { |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
ADOConnection::outp( " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>",false); |
} |
?> |
/web/kaklik's_web/torrentflux/adodb/session/old/adodb-session.php |
---|
0,0 → 1,439 |
<?php |
/* |
V4.80 8 Mar 2006 (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved. |
Released under both BSD license and Lesser GPL library license. |
Whenever there is any discrepancy between the two licenses, |
the BSD license will take precedence. |
Set tabs to 4 for best viewing. |
Latest version of ADODB is available at http://php.weblogs.com/adodb |
====================================================================== |
This file provides PHP4 session management using the ADODB database |
wrapper library. |
Example |
======= |
include('adodb.inc.php'); |
include('adodb-session.php'); |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
print " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>"; |
To force non-persistent connections, call adodb_session_open first before session_start(): |
include('adodb.inc.php'); |
include('adodb-session.php'); |
adodb_sess_open(false,false,false); |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
print " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>"; |
Installation |
============ |
1. Create this table in your database (syntax might vary depending on your db): |
create table sessions ( |
SESSKEY char(32) not null, |
EXPIRY int(11) unsigned not null, |
EXPIREREF varchar(64), |
DATA text not null, |
primary key (sesskey) |
); |
For oracle: |
create table sessions ( |
SESSKEY char(32) not null, |
EXPIRY DECIMAL(16) not null, |
EXPIREREF varchar(64), |
DATA varchar(4000) not null, |
primary key (sesskey) |
); |
2. Then define the following parameters. You can either modify |
this file, or define them before this file is included: |
$ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase'; |
$ADODB_SESSION_CONNECT='server to connect to'; |
$ADODB_SESSION_USER ='user'; |
$ADODB_SESSION_PWD ='password'; |
$ADODB_SESSION_DB ='database'; |
$ADODB_SESSION_TBL = 'sessions' |
3. Recommended is PHP 4.1.0 or later. There are documented |
session bugs in earlier versions of PHP. |
4. If you want to receive notifications when a session expires, then |
you can tag a session with an EXPIREREF, and before the session |
record is deleted, we can call a function that will pass the EXPIREREF |
as the first parameter, and the session key as the second parameter. |
To do this, define a notification function, say NotifyFn: |
function NotifyFn($expireref, $sesskey) |
{ |
} |
Then you need to define a global variable $ADODB_SESSION_EXPIRE_NOTIFY. |
This is an array with 2 elements, the first being the name of the variable |
you would like to store in the EXPIREREF field, and the 2nd is the |
notification function's name. |
In this example, we want to be notified when a user's session |
has expired, so we store the user id in the global variable $USERID, |
store this value in the EXPIREREF field: |
$ADODB_SESSION_EXPIRE_NOTIFY = array('USERID','NotifyFn'); |
Then when the NotifyFn is called, we are passed the $USERID as the first |
parameter, eg. NotifyFn($userid, $sesskey). |
*/ |
if (!defined('_ADODB_LAYER')) { |
include (dirname(__FILE__).'/adodb.inc.php'); |
} |
if (!defined('ADODB_SESSION')) { |
define('ADODB_SESSION',1); |
/* if database time and system time is difference is greater than this, then give warning */ |
define('ADODB_SESSION_SYNCH_SECS',60); |
/* |
Thanks Joe Li. See http://phplens.com/lens/lensforum/msgs.php?id=11487&x=1 |
*/ |
function adodb_session_regenerate_id() |
{ |
$conn =& ADODB_Session::_conn(); |
if (!$conn) return false; |
$old_id = session_id(); |
if (function_exists('session_regenerate_id')) { |
session_regenerate_id(); |
} else { |
session_id(md5(uniqid(rand(), true))); |
$ck = session_get_cookie_params(); |
setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']); |
//@session_start(); |
} |
$new_id = session_id(); |
$ok =& $conn->Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id)); |
/* it is possible that the update statement fails due to a collision */ |
if (!$ok) { |
session_id($old_id); |
if (empty($ck)) $ck = session_get_cookie_params(); |
setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']); |
return false; |
} |
return true; |
} |
/****************************************************************************************\ |
Global definitions |
\****************************************************************************************/ |
GLOBAL $ADODB_SESSION_CONNECT, |
$ADODB_SESSION_DRIVER, |
$ADODB_SESSION_USER, |
$ADODB_SESSION_PWD, |
$ADODB_SESSION_DB, |
$ADODB_SESS_CONN, |
$ADODB_SESS_LIFE, |
$ADODB_SESS_DEBUG, |
$ADODB_SESSION_EXPIRE_NOTIFY, |
$ADODB_SESSION_CRC, |
$ADODB_SESSION_TBL; |
$ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime'); |
if ($ADODB_SESS_LIFE <= 1) { |
// bug in PHP 4.0.3 pl 1 -- how about other versions? |
//print "<h3>Session Error: PHP.INI setting <i>session.gc_maxlifetime</i>not set: $ADODB_SESS_LIFE</h3>"; |
$ADODB_SESS_LIFE=1440; |
} |
$ADODB_SESSION_CRC = false; |
//$ADODB_SESS_DEBUG = true; |
////////////////////////////////// |
/* SET THE FOLLOWING PARAMETERS */ |
////////////////////////////////// |
if (empty($ADODB_SESSION_DRIVER)) { |
$ADODB_SESSION_DRIVER='mysql'; |
$ADODB_SESSION_CONNECT='localhost'; |
$ADODB_SESSION_USER ='root'; |
$ADODB_SESSION_PWD =''; |
$ADODB_SESSION_DB ='xphplens_2'; |
} |
if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) { |
$ADODB_SESSION_EXPIRE_NOTIFY = false; |
} |
// Made table name configurable - by David Johnson djohnson@inpro.net |
if (empty($ADODB_SESSION_TBL)){ |
$ADODB_SESSION_TBL = 'sessions'; |
} |
/* |
$ADODB_SESS['driver'] = $ADODB_SESSION_DRIVER; |
$ADODB_SESS['connect'] = $ADODB_SESSION_CONNECT; |
$ADODB_SESS['user'] = $ADODB_SESSION_USER; |
$ADODB_SESS['pwd'] = $ADODB_SESSION_PWD; |
$ADODB_SESS['db'] = $ADODB_SESSION_DB; |
$ADODB_SESS['life'] = $ADODB_SESS_LIFE; |
$ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; |
$ADODB_SESS['debug'] = $ADODB_SESS_DEBUG; |
$ADODB_SESS['table'] = $ADODB_SESS_TBL; |
*/ |
/****************************************************************************************\ |
Create the connection to the database. |
If $ADODB_SESS_CONN already exists, reuse that connection |
\****************************************************************************************/ |
function adodb_sess_open($save_path, $session_name,$persist=true) |
{ |
GLOBAL $ADODB_SESS_CONN; |
if (isset($ADODB_SESS_CONN)) return true; |
GLOBAL $ADODB_SESSION_CONNECT, |
$ADODB_SESSION_DRIVER, |
$ADODB_SESSION_USER, |
$ADODB_SESSION_PWD, |
$ADODB_SESSION_DB, |
$ADODB_SESS_DEBUG; |
// cannot use & below - do not know why... |
$ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER); |
if (!empty($ADODB_SESS_DEBUG)) { |
$ADODB_SESS_CONN->debug = true; |
ADOConnection::outp( " conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB "); |
} |
if ($persist) $ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT, |
$ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); |
else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT, |
$ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB); |
if (!$ok) ADOConnection::outp( " |
-- Session: connection failed</p>",false); |
} |
/****************************************************************************************\ |
Close the connection |
\****************************************************************************************/ |
function adodb_sess_close() |
{ |
global $ADODB_SESS_CONN; |
if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); |
return true; |
} |
/****************************************************************************************\ |
Slurp in the session variables and return the serialized string |
\****************************************************************************************/ |
function adodb_sess_read($key) |
{ |
global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC; |
$rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time()); |
if ($rs) { |
if ($rs->EOF) { |
$v = ''; |
} else |
$v = rawurldecode(reset($rs->fields)); |
$rs->Close(); |
// new optimization adodb 2.1 |
$ADODB_SESSION_CRC = strlen($v).crc32($v); |
return $v; |
} |
return ''; // thx to Jorma Tuomainen, webmaster#wizactive.com |
} |
/****************************************************************************************\ |
Write the serialized data to a database. |
If the data has not been modified since adodb_sess_read(), we do not write. |
\****************************************************************************************/ |
function adodb_sess_write($key, $val) |
{ |
global |
$ADODB_SESS_CONN, |
$ADODB_SESS_LIFE, |
$ADODB_SESSION_TBL, |
$ADODB_SESS_DEBUG, |
$ADODB_SESSION_CRC, |
$ADODB_SESSION_EXPIRE_NOTIFY; |
$expiry = time() + $ADODB_SESS_LIFE; |
// crc32 optimization since adodb 2.1 |
// now we only update expiry date, thx to sebastian thom in adodb 2.32 |
if ($ADODB_SESSION_CRC !== false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) { |
if ($ADODB_SESS_DEBUG) echo " |
-- Session: Only updating date - crc32 not changed</p>"; |
$qry = "UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time(); |
$rs = $ADODB_SESS_CONN->Execute($qry); |
return true; |
} |
$val = rawurlencode($val); |
$arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val); |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
$var = reset($ADODB_SESSION_EXPIRE_NOTIFY); |
global $$var; |
$arr['expireref'] = $$var; |
} |
$rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr, |
'sesskey',$autoQuote = true); |
if (!$rs) { |
ADOConnection::outp( ' |
-- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().'</p>',false); |
} else { |
// bug in access driver (could be odbc?) means that info is not commited |
// properly unless select statement executed in Win2000 |
if ($ADODB_SESS_CONN->databaseType == 'access') |
$rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
} |
return !empty($rs); |
} |
function adodb_sess_destroy($key) |
{ |
global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
reset($ADODB_SESSION_EXPIRE_NOTIFY); |
$fn = next($ADODB_SESSION_EXPIRE_NOTIFY); |
$savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); |
$rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$ADODB_SESS_CONN->SetFetchMode($savem); |
if ($rs) { |
$ADODB_SESS_CONN->BeginTrans(); |
while (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
$fn($ref,$key); |
$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$rs->MoveNext(); |
} |
$ADODB_SESS_CONN->CommitTrans(); |
} |
} else { |
$qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'"; |
$rs = $ADODB_SESS_CONN->Execute($qry); |
} |
return $rs ? true : false; |
} |
function adodb_sess_gc($maxlifetime) |
{ |
global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY; |
if ($ADODB_SESSION_EXPIRE_NOTIFY) { |
reset($ADODB_SESSION_EXPIRE_NOTIFY); |
$fn = next($ADODB_SESSION_EXPIRE_NOTIFY); |
$savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM); |
$t = time(); |
$rs =& $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t"); |
$ADODB_SESS_CONN->SetFetchMode($savem); |
if ($rs) { |
$ADODB_SESS_CONN->BeginTrans(); |
while (!$rs->EOF) { |
$ref = $rs->fields[0]; |
$key = $rs->fields[1]; |
$fn($ref,$key); |
$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'"); |
$rs->MoveNext(); |
} |
$rs->Close(); |
$ADODB_SESS_CONN->CommitTrans(); |
} |
} else { |
$qry = "DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time(); |
$ADODB_SESS_CONN->Execute($qry); |
if ($ADODB_SESS_DEBUG) ADOConnection::outp(" |
-- <b>Garbage Collection</b>: $qry</p>"); |
} |
// suggested by Cameron, "GaM3R" <gamr@outworld.cx> |
if (defined('ADODB_SESSION_OPTIMIZE')) { |
global $ADODB_SESSION_DRIVER; |
switch( $ADODB_SESSION_DRIVER ) { |
case 'mysql': |
case 'mysqlt': |
$opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL; |
break; |
case 'postgresql': |
case 'postgresql7': |
$opt_qry = 'VACUUM '.$ADODB_SESSION_TBL; |
break; |
} |
if (!empty($opt_qry)) { |
$ADODB_SESS_CONN->Execute($opt_qry); |
} |
} |
if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL; |
else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL; |
$rs =& $ADODB_SESS_CONN->SelectLimit($sql,1); |
if ($rs && !$rs->EOF) { |
$dbts = reset($rs->fields); |
$rs->Close(); |
$dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts); |
$t = time(); |
if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) { |
$msg = |
__FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)"; |
error_log($msg); |
if ($ADODB_SESS_DEBUG) ADOConnection::outp(" |
-- $msg</p>"); |
} |
} |
return true; |
} |
session_module_name('user'); |
session_set_save_handler( |
"adodb_sess_open", |
"adodb_sess_close", |
"adodb_sess_read", |
"adodb_sess_write", |
"adodb_sess_destroy", |
"adodb_sess_gc"); |
} |
/* TEST SCRIPT -- UNCOMMENT */ |
if (0) { |
session_start(); |
session_register('AVAR'); |
$_SESSION['AVAR'] += 1; |
ADOConnection::outp( " |
-- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>",false); |
} |
?> |
/web/kaklik's_web/torrentflux/adodb/session/old/crypt.inc.php |
---|
0,0 → 1,64 |
<?php |
// Session Encryption by Ari Kuorikoski <ari.kuorikoski@finebyte.com> |
class MD5Crypt{ |
function keyED($txt,$encrypt_key) |
{ |
$encrypt_key = md5($encrypt_key); |
$ctr=0; |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++){ |
if ($ctr==strlen($encrypt_key)) $ctr=0; |
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1); |
$ctr++; |
} |
return $tmp; |
} |
function Encrypt($txt,$key) |
{ |
srand((double)microtime()*1000000); |
$encrypt_key = md5(rand(0,32000)); |
$ctr=0; |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++) |
{ |
if ($ctr==strlen($encrypt_key)) $ctr=0; |
$tmp.= substr($encrypt_key,$ctr,1) . |
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1)); |
$ctr++; |
} |
return base64_encode($this->keyED($tmp,$key)); |
} |
function Decrypt($txt,$key) |
{ |
$txt = $this->keyED(base64_decode($txt),$key); |
$tmp = ""; |
for ($i=0;$i<strlen($txt);$i++){ |
$md5 = substr($txt,$i,1); |
$i++; |
$tmp.= (substr($txt,$i,1) ^ $md5); |
} |
return $tmp; |
} |
function RandPass() |
{ |
$randomPassword = ""; |
srand((double)microtime()*1000000); |
for($i=0;$i<8;$i++) |
{ |
$randnumber = rand(48,120); |
while (($randnumber >= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96)) |
{ |
$randnumber = rand(48,120); |
} |
$randomPassword .= chr($randnumber); |
} |
return $randomPassword; |
} |
} |
?> |
/web/kaklik's_web/torrentflux/adodb/session/session_schema.xml |
---|
0,0 → 1,26 |
<?xml version="1.0"?> |
<schema version="0.2"> |
<table name="sessions"> |
<desc>table for ADOdb session-management</desc> |
<field name="SESSKEY" type="C" size="32"> |
<descr>session key</descr> |
<KEY/> |
<NOTNULL/> |
</field> |
<field name="EXPIRY" type="I" size="11"> |
<descr></descr> |
<NOTNULL/> |
</field> |
<field name="EXPIREREF" type="C" size="64"> |
<descr></descr> |
</field> |
<field name="DATA" type="XL"> |
<descr></descr> |
<NOTNULL/> |
</field> |
</table> |
</schema> |