session_start () завершается с ошибкой на конкретном скрипте - PullRequest
0 голосов
/ 18 января 2019

В самом простом из возможных кодов

<?php
    $ok = session_start();
    echo var_dump($ok);
?>

запуск сеанса завершается неудачно, $ok - false, и файл cookie сеанса не создается. Аналогично, присвоение имени сеансу session_name('xxx'); не имеет никакого эффекта. Переменная $_SESSION также не сохраняет значения, если она установлена ​​в другом скрипте.

Другие устаревшие сценарии на том же сервере, которые используют функцию сеанса, работают должным образом. Тот же скрипт отлично работает при запуске на localhost.

Шаги, которые я сделал во время анализа ошибок, где:

  1. Я удалил имя сессии и все остальное, чтобы получить скрипт выше (минимальный пример воспроизводит ошибку).
  2. Я проверил журнал ошибок, который предлагает мой провайдер, но запись вообще не была найдена
  3. Я убедился, что никаких дополнительных пробелов нет, и все сценарии немедленно начинаются с session_start().
  4. В том же сценарии я показал phpinfo(), чтобы отметить, что:
    1. Session Support: enabled
    2. session.auto_start: Off
    3. session.use_cookies: 1
    4. session.use_only_cookies: 1 (оспаривается, но поскольку другие скрипты работают ...)
  5. Я начал сомневаться в моем здравомыслии.
  6. Я вспомнил, как сталкивался с "невидимыми символами" в виде меток порядка следования байтов в текстовых файлах ранее и полагал, что, возможно, что-то вроде кодирования может быть проблемой (см. Ответ ниже) ...

Каковы дополнительные источники ошибок, которые могут вызвать эти симптомы?

1 Ответ

0 голосов
/ 18 января 2019

Проблема заключалась в том, что файлы сценариев были закодированы как то, что Notepad ++ называет UTF-8 BOM в Windows.

enter image description here

Преобразование его в прямое UTF-8 в Notepad ++ и повторная загрузка скриптов немедленно исправили все проблемы.

Так что я предполагаю, что где-то в файлах была оставлена ​​метка порядка следования байтов, из-за которой установка php на сервере не распознала или не смогла разобрать файл сценария.

Редактировать: та же самая основная причина была описана гораздо более подробно Марио в https://stackoverflow.com/a/8028987/3055288

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...