Это немного сложно сделать в php, AFAIK.
Но вы можете попробовать сделать пассивный обработчик сессии:
- Хранить идентификаторы сеанса, связанные с отметкой времени.
- Каждый раз, когда пользователь, связанный с определенным идентификатором, делает запрос, обновляйте его метку времени.
Вы можете обнаружить несуществующие сеансы, сравнивая текущую систему и метки времени каждого сеанса. Предполагается, что те, которые отличаются выше заданного порога (скажем, 30 минут), скончались. Затем вы можете выполнить свои собственные обработчики сохранения для этих идентификаторов сеансов.
Это не будет работать, если обработчик конца сеанса должен выполняться немедленно, так как этот процесс выполняется каждый раз, когда поступает запрос (от любого пользователя), поэтому он будет напрямую зависеть от потока трафика сайта.
Но вы также можете решить эту проблему, устанавливая задания cron каждые 15 минут или около того. В зависимости от того, насколько дорогими являются ваши обработчики сохранения, кажется приемлемой периодичность.