Вызов session_write_close () перед Zend_Session :: start () в начальной загрузке вызывает ошибку - PullRequest
2 голосов
/ 28 марта 2011

Так что мне нужен доступ к существующему сеансу от Zend.Не спрашивай почему, я не люблю говорить об этом.Во всяком случае, я дошел до того, что обнаружил, что могу получить к нему доступ с начальной загрузки, прежде чем инициализировать сеанс.У меня есть следующий код, чтобы попытаться вытащить его и передать:

 protected function _initSession() {
        session_start();
        $values = $_SESSION;
        session_write_close();

        $db = Zend_Db::factory('Pdo_Mysql', array(
            'host'        =>'localhost',
            'username'    => 'uname',
            'password'    => '******',
            'dbname'    => 'dbname'
        ));
        Zend_Db_Table_Abstract::setDefaultAdapter($db);


        $sessionConfig = array( 
            'name'           => 'Sessions',      
            'primary'        => 'sessionID',   
            'modifiedColumn' => 'lastModifiedTime',     
            'dataColumn'     => 'data',
            'lifetimeColumn' => 'lifetime'
        ); 
        $saveHandler = new Zend_Session_SaveHandler_DbTable($sessionConfig); 
        Zend_Session::setSaveHandler($saveHandler); 
        Zend_Session::start();

        $old = new Zend_Session_Namespace('OLD');
        $old->values = $values;
}

Он задыхается, когда набирает Zend_Session::start(), утверждая, что сеанс уже запущен.Но я позвонил session_write_close(), чтобы закрыть сеанс, и, насколько я могу судить по моему гугл-фу, нет ничего плохого в перезапуске ранее закодированного сеанса.Так почему это задыхается?Это что-то особенное для ZF?Есть ли что-то еще, что мне нужно сделать, чтобы закрыть сессию?Что дает?

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

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

Просто используйте php "session_start ()" вместо "Zend_Session::Начните();"

"Zend_Session :: start ();"не работает после закрытия сессии, поэтому вы можете использовать php session_start ();

Если вы найдете какое-либо хорошее решение, пожалуйста, обновите меня:)

0 голосов
/ 27 февраля 2012

Вы просто не можете.

Прежде всего, как описано в документации ZF :

Не используйте PHP-функцию »session_start () напрямую.Если вы используете session_start () напрямую, а затем начинаете использовать Zend_Session_Namespace, Zend_Session :: start () генерирует исключение («сессия уже запущена»).

Таким образом, ваш код должен выглядетьвот так:

    Zend_Session::start();
    $values = $_SESSION;
    Zend_Session::writeClose();

Но в Zend / Session.php: 418 у нас есть:

    if (self::$_sessionStarted && self::$_destroyed) {
        require_once 'Zend/Session/Exception.php';
        throw new Zend_Session_Exception('The session was explicitly destroyed during this request, attempting to re-start is not allowed.');
    }

Итак, то, как вы делаете вещи, не поддерживается ZF (как предложено:либо с двумя разными запросами, либо с помощью пакетного сценария).

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