masterok
Новичок
session_set_save_handler + php 5.2.0
Добрый день.
Столкнулся с несовсем понятным мне поведением скрипта при использовании session_set_save_handler.
Ф-я используется с целью хранения сессий в mysql.
Ниже небольшой кусок кода заменяющий стандартную ф-ю write
$DB_INFO - массив хранящий настройки доступа к mysql (объявленный ранее)
$Sql - объект (объявленный ранее)
34 function write($id, $sess_data)
35 {
36 global $Sql,$DB_INFO;
37
38 $Sql->getQuery("SELECT session_id FROM $DB_INFO[TB_SES] WHERE session_key = '$id' AND valid = 'yes' AND ip_address='".$_SERVER['REMOTE_ADDR']."'");
if ($Sql->getNumRows())
{
// session exists: update
$row = $Sql->fetchRow();
$session_id = $row[0];
$query = "UPDATE $DB_INFO[TB_SES] SET session_data='". mysql_escape_string($sess_data) ."',last_time='".time()."' WHERE session_id='$session_id' AND ip_address='".$_SERVER['REMOTE_ADDR']."'";
}
else
{
// session does not exist: insert
$query = "INSERT INTO $DB_INFO[TB_SES] (last_time,valid,session_key,session_data,ip_address) VALUES ('".time()."','yes','". mysql_escape_string($id) ."','". mysql_escape_string($sess_data) ."','".$_SERVER['REMOTE_ADDR']."')";
}
$Sql->getQuery($query);
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc") or die("Failed to register session handler");
Данная ф-я отлично ранее работала на всех хостингах и всех версиях пхп, однако на одном их хостингов где стоит последний php 5.2.0, получаю ошибку:
Fatal error: Call to a member function getQuery() on a non-object in /usr/local/.../class_sessions.php on line 38
Смысл ошибки понятен, однако причина ошибки не ясна, т.к. объект $Sql объявлен до session_start().
Скажем если в начале скрипта написать print_r($Sql) - то благополучно получаю указатель на объект, а print_r($Sql) внутри ф-и write() результата не даёт.
Складывается такое впечатление что global $Sql в ф-ии просто не работает.
-~{}~ 05.12.06 10:18:
Неужели неукого нет мыслей по этому поводу ?
Добрый день.
Столкнулся с несовсем понятным мне поведением скрипта при использовании session_set_save_handler.
Ф-я используется с целью хранения сессий в mysql.
Ниже небольшой кусок кода заменяющий стандартную ф-ю write
$DB_INFO - массив хранящий настройки доступа к mysql (объявленный ранее)
$Sql - объект (объявленный ранее)
34 function write($id, $sess_data)
35 {
36 global $Sql,$DB_INFO;
37
38 $Sql->getQuery("SELECT session_id FROM $DB_INFO[TB_SES] WHERE session_key = '$id' AND valid = 'yes' AND ip_address='".$_SERVER['REMOTE_ADDR']."'");
if ($Sql->getNumRows())
{
// session exists: update
$row = $Sql->fetchRow();
$session_id = $row[0];
$query = "UPDATE $DB_INFO[TB_SES] SET session_data='". mysql_escape_string($sess_data) ."',last_time='".time()."' WHERE session_id='$session_id' AND ip_address='".$_SERVER['REMOTE_ADDR']."'";
}
else
{
// session does not exist: insert
$query = "INSERT INTO $DB_INFO[TB_SES] (last_time,valid,session_key,session_data,ip_address) VALUES ('".time()."','yes','". mysql_escape_string($id) ."','". mysql_escape_string($sess_data) ."','".$_SERVER['REMOTE_ADDR']."')";
}
$Sql->getQuery($query);
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc") or die("Failed to register session handler");
Данная ф-я отлично ранее работала на всех хостингах и всех версиях пхп, однако на одном их хостингов где стоит последний php 5.2.0, получаю ошибку:
Fatal error: Call to a member function getQuery() on a non-object in /usr/local/.../class_sessions.php on line 38
Смысл ошибки понятен, однако причина ошибки не ясна, т.к. объект $Sql объявлен до session_start().
Скажем если в начале скрипта написать print_r($Sql) - то благополучно получаю указатель на объект, а print_r($Sql) внутри ф-и write() результата не даёт.
Складывается такое впечатление что global $Sql в ф-ии просто не работает.
-~{}~ 05.12.06 10:18:
Неужели неукого нет мыслей по этому поводу ?