Я модифицирую web-систему (Apache, PHP), выдающую данные пользователю в браузер.
Получение данных на сервере бывает оправданно долгим.
Всё работает, но проблема в том, что если серверный скрипт чуток «подвис» или просто клиент передумал дожидаться данных, мы получаем намертво подвисшее окно браузера, оживить которое не удаётся порой даже радикальными методами!
Выяснилось, что блокировка происходит на сервере во результате входа в сессию в PHP ( @session_start(); ).
Блокировка там вероятно вполне оправдана, например она может помочь справиться с DoS-завалом сервера запросами со стороны недобросовесных пользователей. Но в таких ситуациях хочется иметь возможность её отключения. Точнее хочется как то «убить» подвисший предыдущий PHP-скрипт своей сессии на сервере.
PS Я сейчас прочитал, что блокировки не будет, если в нужном месте вставить функцию session_write_close();
Однако скрипты, доставшиеся мне по наследству довольно запутаны, не факт что просто будет найти в них эти места.
Кроме того, всё таки неплохо было бы прибивать зомби-скрипт предыдущего HTTP-запроса, который на сервере почему-то сам собой не прибивается, продолжает выполнятся в-никуда (это видно по продолжающемуся запросу к СУБД).
Кстати, данные запрашиваются через jQuery/Ajax.
Вот что я прочитал в комментариях
http://php.net/manual/ru/function.session-write-close.php :
Beware of session_write_close when calling PHP scripts from an Ajax page:
this does not "finalize" the session data writing, but in fact it resets it!
Кто-нибудь может прокомментировать этот комментарий?
Также я хотел бы поподробнее узнать, что произойдёт, если скрипт будет менять сессионные переменные после session_write_close() ?
Я так понял — ничего, а хотелось бы, что бы скрпит сигнализировал об ошибке!