Ошибка начала сеанса - PullRequest
0 голосов
/ 05 июля 2011

Это не ваш обычный сеанс, не удалось запустить вопрос, нет пробелов, я не вызвал его в другом файле и т. Д.

В настоящее время я работаю над приложением, так как начал собирать библиотеку сеансов.Теперь, когда я звоню session_start, я получаю следующую ошибку:

Сессия уже была начата - игнорируется session_start()

Для тех, кто хочет увидетьsource: https://github.com/AdminSpot/ASFramework/blob/master/system/libraries/session.php

Это обычно означает, что директива session.autostart установлена ​​на 1, но это не так, это не так, она установлена ​​на 0, и я проверил это, выполнив следующие действия:

  • Поиск по всей моей системе файлов php.ini*, их проверка
  • Выполнение следующей команды php --ini Проверка и проверка INI-файлов
  • Выполнение следующей команды php -i | grep session.auto_start.который ответил session.auto_start => Off => Off
  • Проверил страницу PHPInfo, см. изображение ниже
  • Проверил файлы php.ini для cgi
  • На nginx
  • grep -lir "session_start" * показывает только мой библиотечный файл
  • Перезапуск FastCGI, Nginx и всего сервера

Я создал базовый сценарий тестирования, чтобы проверить, где я только что вызвал начало сеанса

Вызов phpinfo() сообщает, что активный php.ini равен /etc/php5/cgi/php.ini, поэтому после запуска cat /etc/php5/cgi/php.ini | grep session.auto_start я получаю session.auto_start = 0, поэтому он отключен. Может ли это быть NGinx?

Кто-нибудь знает, что происходит, некоторые сведения о сервере приведены ниже:

  • PHP: PHP 5.3.5-1ubuntu7.2 с Suhosin-Patch
  • MySQL: версия 14.14 Distrib5.1.54, для debian-linux-gnu (i686) с использованием readline 6.2
  • Nginx: Версия: nginx / 0.8.54

Экран PHPInfo:

enter image description here

Ответы [ 4 ]

2 голосов
/ 05 июля 2011

Моим первым предположением будет то, что у вас есть файл автоматического добавления или .htaccess, который изменяет настройки в это время.

Вы можете использовать ini_get для получения значения session.auto_start и auto_prepend_file для подтверждения. phpinfo () тоже должен работать.

Редактировать

Может ли быть так, что ваша библиотека сеанса создается дважды? Поскольку return $this->session_started является переменной экземпляра, это может вызвать проблемы. Что произойдет, если вы установите это в переменную уровня класса?

Примечание: У вас также есть это return $this->session_started = true; в конце start() метода. Это не должно иметь значения, но выглядит смешно.

0 голосов
/ 05 июля 2011

http://php.net/manual/en/function.session-start.php#90007

Проверьте и проверьте, передается ли вам файл cookie сеанса. Может помочь вам сузить его.

0 голосов
/ 05 июля 2011

И в любом случае вы можете просто проверить, начался ли сеанс или нет.

if (!isset($_SESSION)) {
     session_start();
}
0 голосов
/ 05 июля 2011

Как насчет .htaccess, содержащего php_value session.auto_start 1? PHP в командной строке будет полностью игнорировать переопределения настроек в файлах .htaccess. Помните, что командная строка PHP и веб-PHP имеют совершенно разные файлы .ini в большинстве стандартных конфигураций, поэтому проверка через командную строку - пустая трата времени.

Я бы предложил, чтобы ваш скрипт выполнил phpinfo() непосредственно перед одним из ваших вызовов session_start и проверил, какие там эффективные настройки.

...