возникла проблема ... у меня есть класс для работы с сессиями через БД потом от нех делать рнешил сделать тоже самое но с использованием session_set_save_handler вот что я делаю .. PHP: <?php //Различные функции require_once ('includes/func.php'); //Файл конфигурации\\ require_once ('includes/config.php'); $a = 'aa'; function ses_open($save_path,$ses_name) { return true; } function ses_close() { return true; } function ses_read($key) { global $db; $res = $db->mysql_qw('SELECT `val` FROM `session` WHERE `key`=?',$key) or die(); $fetch = $db->mysql_fetch($res); return $fetch['val']; } function ses_write($key,$val) { global $db; $db->mysql_qw('REPLACE INTO `session` SET `val`=?,`key`=?',$val,$key) or die(); return true; } function ses_destroy($key) { global $db; $db->mysql_qw('DELETE FROM `session` WHERE `key` = ?',$key) or die(); return true; } function ses_gc($maxlifetime) { global $db; $time = time() - $maxlifetime; $db->mysql_qw('DELETE FROM `session` WHERE UNIX_TIMESTAMP(`time`) <= ?',$time) or die(); return true; } session_set_save_handler("ses_open","ses_close","ses_read","ses_write","ses_destroy","ses_gc"); session_start(); $_SESSION['test'] = 1; ?> Выводит ошибку Fatal error: Call to a member function mysql_qw() on a non-object in test.php on line 29 Я сделал вывод массива $GLOBALS в ф-ции ses_read и ses_write И удивился когда обьект $db существует в ses_read а в ses_write он уже уничтожен ... думал изза __destruct() в классе mysql но нет =\\ кто может обьеснить что тут произошло?
Может из-за этого: session_write_close(); //cancel the session's auto start,important Прописать в самом начале
Gifts значит вызов записи и закрытия происходят после уничтожения обьектов? а насчёт session_write_close я так и не понел чтоб решить эту проблему можно вызвать из деструктора эту функцию?
хех ... ппц )) вызвал ф-цию в деструкторе ... тож не работает но только теперь при выводе масива GLOBALS выводит Code: Array *RECURSION*
Doom123 Функция session_write_close должна быть вызвана последней, или после всех операций с сессиями. Или можно зарегистрировать, чтобы функция вызывалась перед завершением скрипта, с помощью register_shutdown_function('session_write_close'); Если же просто ждать когда сработает session_set_save_handler то все объекты будут уже разрушены.