VaaL2004
@VaaL2004

Почему не записывает сессию в базу?

Здравствуйте, есть php-скрипт, в нем активно используются сессии, и потребовалось хранить сессии в базе.

Был найден следующий код:

Исходник на Гитхабе

И, собственно говоря, вставлен в скрипт как и показано в примере:

require_once('sessions.php'); // Данный скрипт лежит в этом файле

$session = new MySessionHandler(); //Имя класса пришлось сменить, с какой-то версии php SessionHandler это зарезервированное имя

// add db data
$session->setDbDetails('localhost', 'root', '', 'session_db');

// OR alternatively send a MySQLi ressource
// $session->setDbConnection($mysqli);

 $session->setDbTable('session_db');

session_set_save_handler(array($session, 'open'),
                         array($session, 'close'),
                         array($session, 'read'),
                         array($session, 'write'),
                         array($session, 'destroy'),
                         array($session, 'gc'));

// The following prevents unexpected effects when using objects as save handlers.
register_shutdown_function('session_write_close');

session_start();



/*
Далее идёт код, в котором идёт работа с сессиями, на файлах всё происходило нормально
*/


Собственно говоря, в чем проблема: никаких ошибок не показывает, файлы с сессиями создавать перестал (справедливо), однако в базу он ни строчки не записывает! :(
Может кто-нибудь сталкивался с таким? Подскажите, пожалуйста?

Версия PHP 5.4.26
  • Вопрос задан
  • 2714 просмотров
Решения вопроса 1
reffy
@reffy
Я молодец.
Только что проверил — всё работает. PHP 5.4.29.
После строки session_start(); пишу «$_SESSION['test'] = 'hello';» и в бд записывается сессия.

Попробуйте посмотреть, что приходит в метод write класса SessionHandler:

public function write($id, $data) {
        echo $data; exit;

        $sql = sprintf("REPLACE INTO %s VALUES('%s', '%s', '%s')",
        ...
    }


У меня это «test|s:5:"hello";».

Проблема где-то у вас, не разберётесь — выкладывайте больше кода.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы