Привет: Я использую последнюю версию Zend Framework (1.9.3PL1). Я установил следующее в своем .ini
; Bootstrap session resources
resources.session.save_path = APPLICATION_PATH "/../data/sessions"
resources.session.use_only_cookies = true
resources.session.remember_me_seconds = 864000
Затем я хочу инициализировать сеанс в моем загрузчике:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initSession()
{
// What goes here!?
}
}
У меня вопрос, что входит в функцию initSession? Что он должен вернуть, если что?
Кроме того, если я просто запускаю там сеанс, он не распознает конфигурацию .ini (например, save_path не изменяется). Однако, если вы переместите начало на контроллер, конфигурация .ini будет распознана.
РЕДАКТИРОВАТЬ. Возможное решение:
protected function _initSession()
{
// Based on http://framework.zend.com/issues/browse/ZF-6651
$session = $this->getPluginResource('session');
$session->init();
Zend_Session::start();
}
3 ответа
Если вы используете параметры resources.session.*
- в конфигурации вашего приложения, у вас не должно быть метода _initSession()
в начальной загрузке, поскольку этот метод переопределит выполнение ресурса подключаемого модуля session
(Zend_Application_Resource_Session
). Единственный выход из параметров resources.session.*
в файле конфигурации гарантирует, что сеанс будет инициализирован в соответствии с вашими параметрами.
Пожалуйста, прочтите Zend_Application, Theory of Operation для подробное обсуждение так называемых методов ресурсов и подключаемых модулей ресурсов .
Стефан совершенно прав, вы переопределяете ресурс сеанса по умолчанию, который использует эти параметры приложения.
Если вы хотите определить свой собственный метод _initSession () и по-прежнему получать доступ к этим параметрам, используйте что-то вроде:
protected function _initSession()
{
$options = $this->getOptions();
$sessionOptions = array(
'save_path' => $options['resources']['session']['save_path']
);
Zend_Session::setOptions($options);
Zend_Session::start();
}
protected function _initSession()
{
$config = array();
$config['db'] = array('adapter'=>'PDO_SQLITE',
'params' => array('dbname'=> ROOT.'/data/tmp.db3')
);
$config['SaveHandler'] = array(
'name' => 'sessions', //table name as per Zend_Db_Table
'primary' => array(
'id', //the sessionID given by PHP
'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' => 'data', //serialized data
'lifetimeColumn' => 'lifetime', //end of life for a specific record
);
$config['lifetime'] = 60*60*24*30;
$config['options'] = array (
'bug_compat_42' => '',
'bug_compat_warn' => '',
'cache_expire' => '180',
'cache_limiter' => 'nocache',
'cookie_domain' => '',
'cookie_httponly' => '',
'cookie_lifetime' => $config['lifetime'],
'cookie_path' => '/',
'cookie_secure' => '0',
'entropy_file' => '',
'entropy_length' => '0',
'gc_divisor' => '1000',
'gc_maxlifetime' => '1440',
'gc_probability' => '1',
'hash_bits_per_character' => '5',
'hash_function' => '0',
'name' => 'TaMeR_SESSID',
'referer_check' => '',
'save_handler' => 'user',
'save_path' => '',
'serialize_handler' => 'php',
'use_cookies' => '1',
'use_only_cookies' => 'on',
'use_trans_sid' => '0',
'strict' => false,
'remember_me_seconds' => $config['lifetime'],
'throw_startup_exceptions' => true,
);
$db = Zend_Db::factory($config['db']['adapter'], $config['db']['params']);
if( ! in_array('sessions', $db->listTables())) {
$sql = "CREATE TABLE sessions (";
$sql .= "id TEXT, ";
$sql .= "path TEXT, ";
$sql .= "name TEXT DEFAULT '', ";
$sql .= "modified INTEGER, ";
$sql .= "lifetime INTEGER, ";
$sql .= "data TEXT, ";
$sql .= "PRIMARY KEY (id, path, name)";
$sql .= ");";
$db->exec($sql);
}
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config['SaveHandler']));
Zend_Session::setOptions($config['options']);
Zend_Session::start();
}
Похожие вопросы
Новые вопросы
zend-framework
Zend Framework - это объектно-ориентированная среда веб-приложений с открытым исходным кодом, реализованная в PHP 7.1 и лицензированная по новой лицензии BSD. Zend Framework был заархивирован 1 января 2020 года одновременно с миграцией и запуском Laminas Project, официального продолжения под управлением The Linux Foundation.
$sessionOptions = array( 'save_path' => $options['session']['save_path'] );
иZend_Session::setOptions($sessionOptions);