Я сделал классный класс обработчика сеансов, изучая, как работают сессии в php.
У меня нормальный:
открывать, закрывать, читать, писать, уничтожать и выполнять функции gc внутри этого класса.
Я передал класс обработчику (когда класс создан в имеет один параметр, который является соединением db):
$handler = new Session($testdb);
session_set_save_handler(
array($handler,'open'),
array($handler,'close'),
array($handler,'read'),
array($handler,'write'),
array($handler,'destroy'),
array($handler,'gc')
);
session_start();
Все функции внутри этого класса хорошо работали - передача данных назад и вперед в пользовательскую базу данных, как и планировалось, принять сбор мусора. функция gc, похоже, не хочет играть в мяч. Когда он называется вручную, он будет работать нормально, но php никогда не вызывает его.
кодовый блок функции gc:
Public function gc($expire)
{
$SessionInfo = new Delete($this->WebSite,array($expire),
"DELETE FROM sessions
WHERE DATE_ADD(LastAccessed, INTERVAL $expire SECOND) < NOW()
");
echo '<H1>BIG LETTERS</H1>'; // HTML shout out if function is called //
return true;
}
Я знаю, что у каждого session_start() есть 1% -ый шанс, который вызван, но я скорректировал% шанса в файле php.ini, чтобы увеличить шансы на более 50% и несколько раз попытался это сделать. используемый. Тот факт, что функция работает нормально при ручном вызове и тот факт, что другие функции в классе работают так, как они должны... заставляет меня застрять... какие-нибудь идеи?
Исправлена.
Было 2 проблемы:
1: В функции мой запрос должен был взять "?" в INTERVAL $ expire SECOND (так что INTERVAL? SECOND)... Я все еще не уверен, КАК это работало вообще, когда я заметил это. Класс использует инструкцию PDO, которая должна вызывать ошибку при вводе переменной... но yay это другое дело.
2: Файл php.ini показывал неверную вероятность вероятности сбора мусора... вероятно, вплоть до предыдущего редактирования с моей стороны. (ОСНОВНАЯ ПРИЧИНА)