Zend выдает исключение «Сессия уже запущена», когда я не начал сессию, что дает? - PullRequest
3 голосов
/ 23 июля 2011
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in /usr/include/ZendFramework-1.11.3/library/Zend/Session.php on line 462

Это происходит при каждой перезагрузке.Вещи, которые я сделал:

  • Гарантировал, что session.autostart = 0 в моем php.ini
  • искал во всем моем приложении вызовы session_start (), там нет ни одного
  • поместил следующую информацию о конфигурации сеанса в мой config.ini:

    resources.session.save_path = APPLICATION_PATH "/../data/session"
    resources.session.use_only_cookies = true
    resources.session.remember_me_seconds = 864000
    
  • удалил вышеупомянутое из моего config.ini, ничего не изменило

  • перезапускал apache, несколько раз
  • наконец я использую только Zend_Session_Namespace (), который инициализируется в функции init() моего контроллера.

Я получаю этоошибка каждый раз.Что дает?Что еще я не проверил?Единственное место, где слово «сессия» существует даже в моем Приложении (за пределами библиотеки Zend), находится в этом одном контроллере:

<?php

class ContributeController extends Zend_Controller_Action
{
    private $_session;

    private function getSession() {
        return $this->_session;
    }

    public function init()
    {
        $this->_session = new Zend_Session_Namespace('contribute');
    }

    public function indexAction()
    {
        // action body
    }

    public function addAction() {
        $this->getSession()->form = new Application_Form_Contribute_Add_Main();
        $this->view->form = $this->getSession()->form;
    }

    public function importAction() {}


}

?>

Вот поиск grep моего php.ini для ^session:

session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly = 
session.serialize_handler = php
session.gc_divisor     = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4

session.auto_start, явно выключен.

Почему я получаю эту ошибку каждый раз?Что здесь происходит?

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

Ответы [ 3 ]

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

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

1 голос
/ 23 июля 2011

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

Мне почему-то кажется, что вы внутренне перезагружаете страницу формы, в результате чего контроллер init () запускается дважды. Если вы начнете сеанс раньше, то karim79, предложенный в начальной загрузке, должен излечить такие случаи.

1 голос
/ 23 июля 2011

Единственное, что я могу подумать о том, что вы, возможно, не заметили, был бы этот вызов где-то в вашем приложении (возможно, при загрузке?):

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