Я сделал фиктивный класс обработчика сессии, изучая, как работают сессии в php.
У меня нормальная
функции open, close, read, write, destroy и gc внутри этого класса.
Я передал класс обработчику (когда класс создается в имеет один параметр, который является подключением БД):
$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, который должен выдавать ошибку при вводе переменной … но, да, это другое дело.
2: файл php.ini показывал неправильную вероятность вероятности для сборки мусора … вероятно, вплоть до предыдущего редактирования с моей стороны. (ОСНОВНАЯ ПРИЧИНА)
Других решений пока нет …