Zend_session_savehandler_dbtable - странные проблемы - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть этот конфиг в application.ini:

resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.use_only_cookies = true
resources.session.gc_maxlifetime = 864000
resources.session.remember_me_seconds = 864000
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "jm_sessions"
resources.session.saveHandler.options.primary.session_id = "session_id"
resources.session.saveHandler.options.primary.save_path = "save_path"
resources.session.saveHandler.options.primary.name = "name"
resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
resources.session.saveHandler.options.modifiedColumn = "modified"
resources.session.saveHandler.options.dataColumn = "session_data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"

Структура базы данных на 100% правильная, и соединение с БД (работающим) установлено выше этого.Я получаю сообщение об ошибке, что session_id, save_path и т. Д. Являются неопределенными индексами.После этого я добавил этот код в bootstrap:

    protected function _initCoreSession()
    {

            $config = array(

                    'name' => 'jm_sessions', 
                    'primary' => array(

                            'session_id', 
                            'save_path', 
                            'name'
                    ), 
                    'primaryAssignment' => array(

                            'sessionId', 
                            'sessionSavePath', 
                            'sessionName'
                    ), 
                    'modifiedColumn' => 'modified', 
                    'dataColumn' => 'session_data', 
                    'lifetimeColumn' => 'lifetime'
            );

            Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
            Zend_Session::start();
    }

После этого я получаю ошибки, что обработчик сеанса не нашел адаптер bd:

Fatal error: Uncaught exception 'Zend_Db_Table_Exception' with message 'No adapter found for
Zend_Session_SaveHandler_DbTable'

В данном случае документация Zendочень беден, и я просто не знаю, что может быть не так в моей конфигурации.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Ваша конфигурация близка, но не совсем верна.Вот код, который я использую в своем файле application.ini

resources.db.adapter = "Pdo_Mysql" 
resources.db.params.host = "localhost"
resources.db.params.username = "grabby_user" 
resources.db.params.password = "w8F4cqZpaNz2WeS6"
resources.db.params.dbname = "grabby"
resources.db.isDefaultTableAdapter = true

resources.session.name = "Grabby"
resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.use_only_cookies = true
resources.session.remember_me_seconds = 3600
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "session"
resources.session.saveHandler.options.primary[] = "session_id"
resources.session.saveHandler.options.primary[] = "save_path"
resources.session.saveHandler.options.primary[] = "name"
resources.session.saveHandler.options.primaryAssignment[] = "sessionId"
resources.session.saveHandler.options.primaryAssignment[] = "sessionSavePath"
resources.session.saveHandler.options.primaryAssignment[] = "sessionName"
resources.session.saveHandler.options.modifiedColumn = "modified"
resources.session.saveHandler.options.dataColumn = "session_data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"

Просто убедитесь, что переменные primary [] и primaryAssignment [] установлены в одинаковом порядке.Это все, что мне нужно, чтобы сохранить мои сеансы в базе данных.Не нужно ничего устанавливать в файле начальной загрузки:)

1 голос
/ 24 декабря 2010

Я не совсем уверен, где ваша проблема, но я хотел бы поделиться с вами своим $config массивом

public function _initsession() {
        $config = array(
            'name' => 'session', //table name as per Zend_Db_Table
            'primary' => array(
                'session_id', //the sessionID given by PHP
                'save_path', //session.save_path
                'name', //session name
            ),
            'primaryAssignment' => array(
                //you must tell the save handler which columns you
                //are using as the primary key. ORDER IS IMPORTANT
                'sessionId', //first column of the primary key is of the sessionID
                'sessionSavePath', //second column of the primary key is the save path
                'sessionName', //third column of the primary key is the session name
            ),
            'modifiedColumn' => 'modified', //time the session should expire
            'dataColumn' => 'session_data', //serialized data
            'lifetimeColumn' => 'lifetime', //end of life for a specific record
        );
        $adapter = new Zend_Session_SaveHandler_DbTable($config);
        Zend_Session::setSaveHandler($adapter);
        Zend_Session::start();
        $session = new Zend_Session_Namespace('App');
        Zend_Registry::set("session", $session);
    }
...