Всем привет. Вобщем переделываю сессии для хранения в бд при помощи session_set_save_handler(); Всё идёт нормально, кроме записи данных сессии. Код функции sess_write: Код (Text): function sess_write($sess_id, $data) { global $db; $time = time(); $sql = 'UPDATE om_sessions SET sess_data = "'.$data.'", sess_last_touch = '.$time.' WHERE sess_id = "'.$sess_id.'" LIMIT 1'; $db->query($sql); return true; } Ошибка заключается в чём: если не использовать register_shutdown_function('session_write_close'); то пхп ругается, что мол класса $db не существует (он создаётся при старте скрипта). С ней же ошибок никаких не выдаётся. Но и результатов тоже нет. Так же мне известно, что функция sess_write точно вызывается, но, как я понимаю, соединения с бд нет. Если же в этой функции попробовать создать новое соединение, оно не создаётся. Беда Так же в начале скрипта устанавливаю: Код (Text): ini_set('session.save_handler', 'user'); ini_set('session.gc_probability', '100'); В чём может заключаться ошибка? Может в php.ini ещё что указать надо? зы: PHP 5.2, Apache 2.2.x, Linux
http://ru.php.net/manual/ru/function.session-set-save-handler.php бегло просмотрел, думаю в этом примечании указано решение твоей проблемы:
session_set_save_handler можно устанавливать в классе, тоесть примерно так: PHP: <?php class Session { private $db; public function __construct($db) { $this->db = $db; } public function start() { session_set_save_handler( array($this, 'open'), array($this, 'close'), array($this, 'read'), array($this, 'write'), array($this, 'destroy'), array($this, 'gc') ); session_start(); } // а тут описание всех хэндлеров } $session = new Session($db); $session->start(); Тогда проблема отпадёт.