Phil.Roberts your error was due to the fact you weren't checking the right value in the write function and you were returning the whole row on the read function instead of just the session_value.
PHP Code:
<?php
define('SESS_USE_COOKIES' , true);
define('SESS_USE_ONLY_COOKIES', false);
define('SESS_MAX_LIFETIME' , 15);
define('SESS_GC_PROBABILITY' , 50);
class Session
{
var $db;
function Session(&$db, $sessname = 's')
{
$this->db =& $db;
ini_set('session.save_handler', 'user');
ini_set('session.name', $sessname);
ini_set('session.use_cookies', SESS_USE_COOKIES);
ini_set('session.gc_maxlifetime', SESS_MAX_LIFETIME);
ini_set('session.gc_probability', SESS_GC_PROBABILITY);
ini_set('session.use_only_cookies', SESS_USE_ONLY_COOKIES);
session_set_save_handler(
array(&$this, 'sessionOpen'),
array(&$this, 'sessionClose'),
array(&$this, 'sessionRead'),
array(&$this, 'sessionWrite'),
array(&$this, 'sessionDestroyer'),
array(&$this, 'sessionGc')
);
session_start();
}
function sessionOpen($save_path, $session_name)
{
if(!$this->db) {
die('No Database object is available, or there was an error with ' .
'the database');
}
return true;
}
function sessionClose()
{
return true;
}
function sessionRead($session_key)
{
//$session_key = addslashes($session_key);
$session_value = $this->db->query("SELECT session_value
FROM sessions
WHERE session_key = '$session_key'" );
if(!$session_value->isSuccess()) {
die('Database error: ' . $session_value->getErrorMessage());
}
if($session_value->getRowCount() == 1) {
$row = $session_value->getRow(0);
return $row['session_value'];
} else {
return false;
}
}
function sessionWrite($session_key, $val)
{
$session_key = addslashes($session_key);
$val = addslashes($val);
$seconds = SESS_MAX_LIFETIME * 60;
$expires = time() + $seconds;
$session = $this->db->query("SELECT COUNT(*) as count
FROM sessions
WHERE session_key = '$session_key'" );
$count = $session->getRow(0);
if($count['count'] == 0) {
$result =
$this->db->query("INSERT INTO sessions (session_key, session_expire, session_value)
VALUES ('$session_key', '" . mktime() . "', '$val')" );
if(!$result->isSuccess()) {
die('Database error: ' . $result->getErrorMessage());
}
} else {
$result =
$this->db->query("UPDATE sessions
SET session_value = '$val',
session_expire = $expires
WHERE session_key = '$session_key'" );
if(!$result->isSuccess()) {
die('Database error: ' . $result->getErrorMessage());
}
}
return true;
}
function sessionDestroyer($session_key)
{
$session_key = addslashes($session_kay);
$result = $this->db->query("DELETE FROM sessions
WHERE session_key = '$session_key'" );
if(!$result->isSuccess()) {
die('Database error: ' . $result->getErrorMessage());
}
return true;
}
function sessionGc($maxlifetime)
{
$expiration_time = time() - $maxlifetime;
$result = $this->db->query("DELETE FROM sessions
WHERE session_expire < $expiration_time" );
if(!$result->isSuccess()) {
die('Database error: ' . $result->getErrorMessage());
}
return true;
}
}
?>
Specifically you had
PHP Code:
$count = $session->getRow(0);
if($count == 0) {
When you wanted to actually check the value of count
PHP Code:
$count = $session->getRow(0);
if($count['count'] == 0) {
Also same thing in the read function
You had
PHP Code:
if($session_value->getRowCount() == 1) {
return $session_value->getRow(0);
} else {
return false;
}
You needed
PHP Code:
if($session_value->getRowCount() == 1) {
$row = $session_value->getRow(0);
return $row['session_value'];
} else {
return false;
}
Bookmarks