совершенно случайные тайм-ауты после вызова session_start () - PullRequest
1 голос
/ 23 марта 2012

Я уже некоторое время пытаюсь решить эту проблему с сессией php.

Настройка: работает на IIS V6.0, php для windows V 5.2.6

Проблема: в абсолютно случайные моменты времени следующая строка php после session_start () истекает.У меня есть файл auth.php, который включается на каждую страницу сайта экстрасети (для проверки действительных входов в систему)

auth.php
session_start();
if (isset($_SESSION['auth']==1) { <---- timesout here
       do something ... 
}
...

При использовании сайта я получаю случайное «максимальное время выполнения, превышающее 30 секунд»ошибки в строке 2: if (isset ($ _ SESSION ['auth'] == 1) {

Если я изменю этот скрипт на

session_start();
echo 'testing';  <---- timesout here
if (isset($_SESSION['auth']==1) { 
   do something ... 
}
...

Теперь случайная ошибка происходит в строке2 (echo 'testing'), что является простым оператором echo, странно.

Похоже, что session_start () случайным образом вызывает проблемы, предотвращая строку кода сразу после того, как она выдает ошибку тайм-аута (дажедля простого выражения эха) ....

Это происходит на всех страницах сайта (интенсивная работа с базами данных, относительно статично ...), что затрудняет поиск и устранение неисправностей. Я настраивалпеременные сеанса и таймауты в php.ini без всякой удачи

Кто-нибудь сталкивался с чем-то подобным или мог бы подсказать возможные места для просмотра?

спасибо!

1 Ответ

1 голос
/ 23 марта 2012

Быстрый поиск предполагает, что вы должны использовать session_write_close () , чтобы закрыть сеанс, когда вы закончили его использовать, если вы находитесь в файловой системе NTFS. Запуск сеанса блокирует файл сеанса, поэтому никакой другой файл не может получить к нему доступ во время выполнения кода. По некоторым причинам блокировка иногда не снимается автоматически в Windows / NTFS, поэтому вам следует вручную закрыть сеанс, когда вы закончите с ним.

...