register_shutdown_function('session_write_close');
PHP уже позаботится об этом. Не то чтобы вы писали второй раз (а потом провоцировали ошибку, о которой идет речь). Так что убери эту строку.
В целях отладки включите xdebug на своей платформе разработки, где вы можете спровоцировать эту ошибку и / или конфигурацию php-ошибок и записать трассировки стека в журнал ошибок . Должно дать вам представление о том, что происходит, и особенно когда (обычно вы можете надежно работать только с журналом ошибок здесь, STDOUT часто закрывается, когда запись запускается в вашем обработчике сохранения).
Кроме того, вы не делаете отслеживание открытия / закрытия в вашем обработчике сохранения. Как вы можете знать, что вы должны написать, когда сессия закрыта?
Также ваш обработчик сеанса не имеет дело с именами сеансов. Вы должны сделать это немного более гибким, например, при переключении сессий. Если переключение сеансов не предназначено, вы должны выручить за исключением того, что вы молча выбросили класс обработчика сохранения сеанса из рабочего процесса незамеченным.