"сессия уже запущена..." исключение в приложении Zend Framework
Я получаю эту ошибку при попытке загрузить приложение Zend Framework:
Неустранимая ошибка: исключение для исключения 'Zend_Session_Exception' с сообщением сеанс уже запущен session.auto-start или session_start() ' в /www/htdocs/w 00a1ed7/autospin/redaktion/library/Zend/Session.php:462
Трассировка стека:
# 0/www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session/Namespace.php(143): Zend_Session:: заводится (правда)
# 1/www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace → __ конструкт ( 'Zend_Auth')
# 2/www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(91): Zend_Auth_Storage_Session → __ конструкция()
# 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): включают ( '/WWW/HTDOCS/w00...')
# 6/www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/View/Abstract.php(831): Zend_View → _ пробег ( '/WWW/HTDOCS/w00...')
# 7/www/htdocs/w00a1ed в /www/htdocs/w 00a1ed7/autospin/redaktion/library/Zend/Session.php on line 462
Я использую Zend_Auth
и на моем локальном сервере, и он работает хорошо, но на рабочем сервере я получаю предыдущую ошибку, но не каждый раз.
Я проверил, что session.autostart
установлен в 0
в файле .htaccess
.
Как исправить эту ошибку?
Спасибо за ваш ответ, но я не пользователь session_start() нигде. Работайте только с ZF.
У меня есть эта проблема только на общем сервере, на моем локальном сервере script работает отлично.
Я использую функцию INIT с этим кодом:
protected $user;
public function init()
{
if(!Zend_Auth::getInstance()->hasIdentity())
{
$this->_redirect('auth/login');
}else
{
$this->user = Zend_Auth::getInstance()->getIdentity();
}
}
Я все же пытаюсь установить tis-код только в indexAction, так что другим действиям не нужно пытаться использовать Auth... но все еще есть проблемы.
И есть ли способ установить в Action, чтобы не проверять сеанс или что-то вроде этого?
С наилучшими пожеланиями
Ответы
Ответ 1
Это то, что он говорит. Zend_Auth
пытается начать новый сеанс, так как Zend_Session::start()
еще не вызван.
Проблема заключается в том, что Zend_Session::start()
необходимо вызвать до начала сеанса. Но, поскольку session.autostart равно 0 (Кстати, это в php.ini не .htaccess), вы, вероятно, где-то пишете session_start();
. Вам не разрешено это делать, поскольку ZF хочет иметь полный контроль над сеансами, т.е. Вы не должны напрямую обращаться к глобальной переменной сеанса.
Чтобы решить эту проблему, выполните поиск файлов кода для session_start()
и
- удалить все вхождения, кроме одного. Чтобы заметить, что он уже запущен, установите
error_reporting(E_ALL|E_STRICT);
- замените его на
Zend_Session::start();
во всех местах
Если вы не можете найти все вхождения, найдите один session_start(); который беспокоит ваш Zend_Auth::getInstance()->hasIdentity()
и быстро устранит проблему с помощью следующего фрагмента
try {
Zend_Session::start();
} catch(Zend_Session_Exception $e) {
session_start();
}
Если вы используете ZF в своем приложении, я бы пошел с 2)
Ответ 2
Прежде чем это сведёт вас с ума, в вашем коде, вероятно, ничего плохого не будет!
Проверьте свой application.ini для пути сохранения сеанса, для меня это
APPLICATION_PATH '/session'
Теперь проверьте, есть ли у вас правильные разрешения!
Если нет, то cd в папку приложения и введите
sudo chmod 777 session
sudo chown -R [usernamehere] session
sudo chgrp -R [usernamehere] session
Задание выполнено!
Ответ 3
У меня была такая же ошибка. На локальной машине все работало нормально. На сервере нет.
Моим решением было поставить 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();
Ответ 4
Существуют три основные причины, которые вызывают эту проблему:
- session.auto_start должен быть установлен в 0 или выключен. Вы можете проверить его, поставив phpinfo(); в любом файле и попытаться получить к нему доступ в браузере, тогда поиск auto_start будет 0 или выключен. Если нет, установите его или 0.
- Проверить путь сеанса session.save_path в конфигурации на сервере. Если с настройкой по умолчанию он показывает сеанс с ошибкой, сеанс уже запущен session.auto-start или session_start() ', установите его в'/temp '
- Возможно, вы использовали session_start() в своем коде перед инициализацией сессии zend.
В большинстве случаев причиной является второй вариант.
Ответ 5
Если вы разрабатываете приложения с помощью библиотеки RPCL (RADPHP), и вы получаете эту ошибку:
Приложение подняло класс исключения Zend_Session_Exception с сообщением 'session уже запущен session.auto-start или session_start()',
то вот мое решение.
Вы будете удивлены, насколько это просто. Простой включает строку
require_once ( "zcommon.inc.php" );
сразу после открытия PHP-тега в файле, содержащем компонент ZAuth - обычно это файл с формой DataModule. Конечно, убедитесь, что файл zcommon.inc.php находится на вашем пути. Это обеспечит запуск первого сеанса Zend вместо сеанса RPCL.
Также убедитесь, что имя php файлов в вашем приложении соответствует имени содержащихся классов.
Ответ 6
Я хотел бы обратить ваше внимание на проблему сбора мусора, которая была решена здесь Проблемы с PHP 5.3 и папками сеансов или http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage.
После фиксации "сеанс уже запущен" я столкнулся с ошибкой GC. Я подозреваю, что ошибка GC может быть основной причиной ошибки сессии, по крайней мере, в некоторых случаях. До сих пор у меня не было достаточно времени для тщательного изучения, но, пожалуйста, прокомментируйте, если GC и ошибка сессии связаны и в вашем случае.
Ответ 7
имела ту же ошибку. это происходило только в том случае, если одновременно использовались два экземпляра одного и того же сеанса (например, два экземпляра браузера загружались одновременно). Это связано с тем, что php не может одновременно обрабатывать два открытых сеанса с одним и тем же идентификатором.
Ответ 8
Для тех, кто перемещается с одного сервера на другой. Другой проблемой может быть пользователь, с которым работает 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()"
Ответ 9
В случае любого использования, я очистил эту ошибку, извлекая связанные строки, связанные с сеансом, из моего приложения /config/application.ini
;resources.session.save_path = APPLICATION_PATH "/../data/session"
;resources.session.use_only_cookies = true
;resources.session.remember_me_seconds = 3600
Благодаря chelmertz, чтобы понять причину проблемы.
Ответ 10
Для этой проблемы существует проблема:
# 25 "сеанс уже запущен сообщением session.auto-start или session_start()" является ошибочным
Ответ 11
У меня была такая же проблема и поиск по всем сообщениям, включая этот, я не мог найти ответ, пока не выпустил, хотя, хотя у меня был тот же результат исключения, моя ошибка была вызвана чем-то совершенно другим.
У меня действительно была проблема с автозагрузкой. Из-за проблемы во время Bootstrap я считаю, что это привело к тому, что приведенное выше исключение отображалось (скрывая реальную ошибку).
Итак, если вы воспользовались всеми другими возможными исправлениями, попробуйте комментировать детали в своем Bootstrap и посмотрите, не пройдет ли эта проблема. Очевидно, вы медленно возвращаете разные части бутстрапа, чтобы выявить настоящую проблему.