Странное поведение сеанса – исчезновение сеанса

Я испытываю очень странное поведение с PHP и сессией.

Сценарий, который я использую, работает в течение нескольких месяцев и работает на разных серверах с различными версиями PHP.

скрипт считывает URL-адрес и перенаправляет его в зависимости от URL-адреса, например, нажав /offer/abc1234.html, он вызовет предложение класса и передаст параметр abc1234 в качестве параметра.

Я создал класс «failover», который, другими словами, если вы напишете файл /abc1234.html, он проверит различные записи в базе данных, и если он найдет один, он автоматически включит этот класс, как если бы он был вызван по URL-адресу с небольшим количеством дополнительных накладных расходов, разница:

  • /offer/abc1234.html :: index.php -> offer.php -> home.php
  • abc1234.html :: index.php -> error.php -> failover.php -> offer.php -> home.php

Теперь, учитывая, что все это работает и работает месяцами, моя проблема связана с сеансами.

если я удалю /offer/abc1234.html, я вижу набор сеансов и cookie, отправленный в браузер

если я нажму /abc1234.html, сессия будет настроена правильно, никаких ошибок (E_STRICT + E_ALL), никаких предупреждений, ничего нет, но cookie не будет отправлен в браузер. Я даже попытался напечатать $ _SESSION в конце скрипта, и сессия заполнена, и все вары верны, кроме заголовков.

Я попытался отладить его и добавить различные var_dump в разных местах, но ничто не отличается от другого, за исключением того, что header_list () никогда не содержит session_cookie, но он содержит другие файлы cookie, которые я вручную установил:

В настоящее время я печатаю:

  • имя_сеанса ()
  • session_id () – это изменяется при каждом обновлении, но является последовательным на всей странице
  • session_get_cookie_params ()
  • headers_list () – это не содержит заголовок set-cookie, который должен иметь session_start

результат выглядит примерно так:

  • строка (6) "QSCSID"
  • строка (26) "456disv3pl4u2j81dej6h6d717"
  • array (5) {["lifetime"] => int (0) ["path"] => string (1) "/" ["domain"] => string (0) "" ["secure"] => bool (false) ["httponly"] => bool (false)}
  • array (4) {[0] => string (38) "Истекает: Чт, 19 ноября 1981 г. 08:52:00 GMT" [1] => строка (77) "Cache-Control: no-store, no-cache , необходимо-revalidate, post-check = 0, pre-check = 0 "[2] => string (16)" Pragma: no-cache "[3] => string (68)" Set-Cookie: spi = 17468 ; expires = Sat, 26-Oct-2013 05:02:23 GMT; path = / "}

Опять же, я схожу с ума, поскольку все работает раньше в тот же день, а затем я перезапустил апач, и он прекратил работать.

Я проверил сервер, и папка не заполнена, и она доступна для записи, и файлы создаются и пусты, когда я вызываю abcd1234.html

РЕДАКТИРОВАТЬ
во время работы над ним я начинаю открывать файлы через «ee» (редактор FreeBSD) непосредственно на сервере. Ничего не произошло, пока я не открыл / не сохранил класс, никаких изменений в файле не было, я случайно добавил пробел и удалил его, а затем, когда я вышел из редактора, попросил меня сохранить, и я сказал ДА.

PHP скомпилирован с eaccelerator, я уже удалил папку кэша, а также перезапустил apache и увидел, что папка автопопулята. Такой класс (failover.php) – это простая функция, в которой каждая функция является запросом, а затем конструкция вызывает каждую функцию по одному в то время.

Таким образом, кажется, что это работает, но я хотел бы знать, если кто-либо когда-либо испытал что-то подобное, и если бы они знали, что может быть проблемой