2014-05-09 4 views
0

Мне нужно расширить сборщик мусора php, поэтому, когда он удаляет старый сеанс, он также должен удалить некоторые записи в базе данных. Я попытался использовать реализацию SessionHandlerInterface, но он не работает. Где я должен добавить свой код? Возможно ли, или эти реализации связаны со стандартными вызовами session_destroy, а не с уничтожением сборщика мусора?PHP расширять сборщик мусора

ответ

1

Функция session_set_save_handler позволяет подключать обратный вызов для многих сеансовых событий (открывать, закрывать, читать, писать, уничтожать и gc). В вашем случае destroy и/или gc могут сделать это.

+0

Я пробовал оба метода, кажется, он не называется. Можете ли вы привести пример? – user3615971

+0

Вот хороший пример реализации метода 'gc': [здесь] (http://php.net/manual/en/function.session-set-save-handler.php#60316) – WickedYeti

+0

Мне не нужно измените весь процесс обработчика, просто сделайте дополнительный шаг, когда сборщик мусора удалит сеанс. Я хочу сохранить текущую функциональность сохранения в папке. – user3615971

0

Согласно documentation:

Уничтожает сеанс. Вызывается session_regenerate_id() (с $ destroy = TRUE), session_destroy() и при сбое session_decode().

Таким образом, функция уничтожения, определенная с помощью SessionHandlerInterface, будет вызываться только тогда, когда сессия будет явно уничтожена во время сценария или в случае ошибки.

Чтобы уничтожить старые сеансы, вы должны использовать аргумент gcsession_set_save_handler и удалить все записи с помощью datetime < currenttime - $lifetime.


РЕДАКТИРОВАТЬ:

Обратите внимание, что есть только вероятность 1%, имеющий gc называемого на самом начале запроса. Это означает, что это исполнение сильно зависит от того, сколько трафика у вас на вашем сервере. Когда вы работаете один на тестовом сервере, вы не можете легко его выполнить.

Смежные вопросы