2010-12-08 2 views
1

Я не могу воспроизвести это исключение, когда захочу. Это просто происходит время от времени, проверяя навигацию по сайту. Это может произойти на любой странице, без входа пользователя или нет, нет значения .Неожиданный сеанс исключения уже начат с автозапуска сеанса или session_start()

Полностью утерян с этой ошибкой.

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

В Zend, где мы устанавливаем временную директорию для хранения переменных сеанса?

Спасибо,
MEM

ответ

0

Эта ошибка возникает, когда session_start() была вызвана до Zend_Session::start(), или когда PHP флаг конфигурации session_auto_start включен. Убедитесь, что флаг отключен, и ваш код (или любые библиотеки, которые вы используете, помимо ZF) не вызывает session_start().

2

Во-первых, убедитесь, что php не запускается автоматически.

php.ini (or ini_set in your index.php): 
session.auto_start = 0 

Во-вторых, не используйте session_start() или Zend_Session :: начать(), прежде чем вы должны. И если вы их используете, вы можете использовать их только один раз или вы получите уже запущенную сессию.

В-третьих, попробуйте использовать только Zend_Session_Namespace, когда вам это нужно, и даже не используйте команды запуска выше. (В контроллерах основном)

В-четвертых, вы можете настроить ресурс сеанса с помощью Application.ini

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

Больше на ресурсе: http://framework.zend.com/manual/en/learning.multiuser.sessions.html

Хотелось бы надеяться, что помогает :)

4

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

в application.ini:

resources.session.save_path = APPLICATION_PATH "/../tmp/session" 

Это фиксированное исключение для меня. Надеюсь, это сработает и для вас!

+0

У меня была аналогичная проблема, у меня была ошибка написана имя каталога сеанса в application.ini и получалась ошибка «session already started». Ваш ответ привел меня к правильному пути, и я проверил имя каталога и заметил опечатку. Исправлено, и все начало работать. Благодаря! – Cvuorinen 2011-08-05 09:39:54

0

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

Application raised an exception class Zend_Session_Exception with message 'session has already been started by session.auto-start or session_start()',

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

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

require_once("zcommon.inc.php");

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

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

0

Вы на машине Debian/Ubuntu?

Если это так, ваша проблема может быть связана с автоматической сборкой мусора сессий. Попробуйте отключить его, установив это в файле php.ini:

session.gc_probability = 0 

Смотрите http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage для получения дополнительной информации.

0

Делайте то, что Арон сказал добавить:

resources.session.save_path = APPLICATION_PATH "/../temp/session" 

к применению INI. Убедитесь, что у вас есть папка. Работал для меня!

Я также добавил:

phpSettings.session.auto_start = 0 

к применению INI. Не уверен, что это помогло.

1

Это похоже на задачу очистки сеанса, которую Zend пытается выполнить. По умолчанию apache имеет только доступ на запись в каталог сеанса (в поле Ubuntu это будет/var/lib/php5). Это приводит к сбою очистки, что приводит к прерывистым ошибкам HTTP/500.

Самый простой, чтобы дать доступ на чтение апача, выполнив

  1. chmod a+r /var/lib/php5
  2. chgrp www-data /var/lib/php5; chmod g+r /var/lib/php5

Приведенные выше команды предполагают, что вы работаете в Ubuntu. В других дистрибутивах настройте имя пользователя/путь.