Исключение «сеанс уже запущено …» в приложении Zend Framework

Я получаю эту ошибку при попытке загрузить приложение Zend Framework:

Неустранимая ошибка: исключение исключения «Zend_Session_Exception» с сеансом сообщения уже начато session.auto-start или session_start () 'в /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php:462

Трассировки стека:

# 0 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session/Namespace.php(143): Zend_Session :: start (true)

# 1 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace -> __ construct ('Zend_Auth')

# 2 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(91): Zend_Auth_Storage_Session -> __ construct ()

# 3 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(141): Zend_Auth-> getStorage ()

# 4 /www/htdocs/w00a1ed7/autospin/redaktion/application/layouts/scripts/layout.phtml(31): Zend_Auth-> hasIdentity ()

# 5 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/View.php(108): include ('/ www / htdocs / w00 …')

# 6 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/View/Abstract.php(831): Zend_View -> _ run ('/ www / htdocs / w00 …')

# 7 / www / htdocs / w00a1ed в /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php в строке 462

Я использую Zend_Auth и на своем локальном сервере, и он работает хорошо, но на Zend_Auth сервере я получаю предыдущую ошибку, но не каждый раз.

Я проверил, что session.autostart установлен в 0 в файле .htaccess .

Как исправить эту ошибку?


Спасибо за ваш ответ, но я не пользователь session_start () нигде. Работайте только с ZF.

У меня есть эта проблема только на общем сервере, на моем локальном скрипте сервера работает отлично.

Я использую функцию INIT с этим кодом:

защищенный $ user;

 public function init() { if(!Zend_Auth::getInstance()->hasIdentity()) { $this->_redirect('auth/login'); }else { $this->user = Zend_Auth::getInstance()->getIdentity(); } } в систему public function init() { if(!Zend_Auth::getInstance()->hasIdentity()) { $this->_redirect('auth/login'); }else { $this->user = Zend_Auth::getInstance()->getIdentity(); } } 

Я уже постарался установить tis-код только в indexAction, так что другим действиям не нужно пытаться использовать Auth … но все еще есть проблемы.

У меня есть способ установить в Action, чтобы не проверять сеанс или что-то вроде этого?

С наилучшими пожеланиями

Это то, что он говорит. Zend_Auth пытается начать новый сеанс, поскольку Zend_Session::start() еще не был вызван.

Проблема в том, что Zend_Session::start() необходимо вызвать до начала сеанса. Но, поскольку session.autostart равно 0 (Кстати, это в php.ini не .htaccess ), вы, вероятно, написали session_start(); где-то. Вам не разрешено это делать, поскольку ZF хочет иметь полный контроль над сеансами, т. Е. Вы не должны напрямую обращаться к глобальной переменной сеанса.

Чтобы решить эту проблему, выполните поиск файлов кода для session_start() и

  1. удалите все вхождения, кроме одного. Чтобы заметить, что он уже запущен, установите error_reporting(E_ALL|E_STRICT);
  2. замените его на Zend_Session::start(); во всех местах

Если вы не можете найти все вхождения, найдите один session_start (); что беспокоит ваш Zend_Auth::getInstance()->hasIdentity() и решает проблему быстро n 'грязно со следующим фрагментом

 try { Zend_Session::start(); } catch(Zend_Session_Exception $e) { session_start(); } 

Если вы используете ZF в своем приложении, я бы пошел с 2)

Прежде чем это сведёт вас с ума, в вашем коде, наверное, нет ничего плохого!

Проверьте свой application.ini для пути сохранения сеанса, для меня это APPLICATION_PATH '/ session'

Теперь проверьте, есть ли у вас правильные разрешения! Если нет, то cd в папку приложения и введите

 сеанс sudo chmod 777
 sudo chown -R [usernamehere] сеанс
 sudo chgrp -R [usernamehere] сеанс

Работа выполнена!

У меня была такая же ошибка. На локальной машине все работало нормально. На сервере нет. Моим решением было установить Zend_Session::start(); в index.php перед запуском бутстрапа. Чтобы это выглядело так:

 <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); error_reporting(E_ALL); ini_set("display_errors", 1); Zend_Session::start(); $application->bootstrap()->run(); 

Существуют три основные причины, которые порождают эту проблему:

  1. session.auto_start должен быть установлен в 0 или выключен. Вы можете проверить его, поставив phpinfo (); в любом файле и попытаться получить к нему доступ в браузере, тогда поиск auto_start будет 0 или выключен. Если нет, то установите его или 0.
  2. Проверьте путь сеанса session.save_path в конфигурации на сервере. Если при настройке по умолчанию отображается сообщение об ошибке, сеанс уже запущен session.auto-start или session_start () ', установите его в' / temp '
  3. Возможно, вы использовали session_start () в своем коде перед инициализацией сеанса zend.

В большинстве случаев причиной является второй вариант.

Если вы разрабатываете приложения с библиотекой RPCL ( RADPHP ), и вы получаете эту ошибку:

Приложение подняло класс исключения Zend_Session_Exception с сообщением «сеанс уже запущен session.auto-start или session_start ()»,

то вот мое решение.

Вы будете удивлены, насколько это просто. Простые включают строку

require_once ( "zcommon.inc.php");

сразу после открытия PHP-тега в файле, содержащем компонент ZAuth – обычно это файл с формой DataModule . Конечно, убедитесь, что файл zcommon.inc.php находится на вашем пути. Это обеспечит запуск первого сеанса Zend вместо сеанса RPCL.

Также убедитесь, что имя php-файлов в вашем приложении соответствует имени содержащихся классов.

Я хотел бы обратить ваше внимание на проблему сбора мусора, решенную здесь Проблемы с PHP 5.3 и папками сеансов или http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu- session-phpini-мусор .

После того, как «сеанс уже запущен», я обнаружил ошибку GC. Я подозреваю, что ошибка GC может быть основной причиной ошибки сессии, по крайней мере, в некоторых случаях. До сих пор у меня не было достаточно времени для тщательного изучения, но, пожалуйста, прокомментируйте, если GC и ошибка сессии связаны и в вашем случае.

имела ту же ошибку. это происходило только в том случае, если одновременно использовались два экземпляра одной и той же сессии (например, одновременно загружались два экземпляра браузера). Это связано с тем, что php не может одновременно обрабатывать два открытых сеанса с одним и тем же идентификатором.

Для тех, кто перемещается с одного сервера на другой. Другой проблемой может быть пользователь, с которым работает apache. Я запускал другого пользователя в моей старой коробке, которая была установлена ​​на новом. Я использовал конфиги из моего старого httpd.conf и забыл обновить разрешения на / var / lib / php / session, чтобы отобразить другого пользователя.

Чтобы проверить, я изменил perms на 777. Все работало нормально, ошибка исчезла:

 # cd /var/lib/php # chmod 0777 session 

Таким образом, я вернул perms и изменил группу. Конечно, измените newApacheUser на учетную запись пользователя, на которой запущен httpd, на IF NOT apache.

 # chmod 0770 session # chown root:newApacheUser session 

Что-то проверить, если у вас все еще есть эта проблема:

Неустранимая ошибка: исключение исключений «Zend_Session_Exception» с сообщением «сеанс» уже запущен session.auto-start или session_start ()

В случае, если это используется, я очистил эту ошибку, вытащив связанные сессии строки из моего приложения / config / application.ini

 ;resources.session.save_path = APPLICATION_PATH "/../data/session" ;resources.session.use_only_cookies = true ;resources.session.remember_me_seconds = 3600 

Благодаря chelmertz для понимания причины проблемы.

Для этой проблемы существует проблема:

# 25 "уже запущен session.auto-start или session_start ()" сообщение об ошибке вводит в заблуждение

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

У меня действительно была проблема с автозагрузкой. Из-за проблемы во время Bootstrap я считаю, что это привело к тому, что приведенное выше исключение было показано (скрытие реальной ошибки).

Поэтому, если вы воспользовались всеми другими возможными исправлениями, попробуйте комментировать детали в своем Bootstrap и посмотрите, не пройдет ли эта проблема. Очевидно, вы медленно возвращаете разные части бутстрапа, чтобы выявить настоящую проблему.