2009-09-25 14 views
8

Hola: Estoy usando la última versión de Zend Framework (1.9.3PL1). He establecido la siguiente en mi iniZend Framework Application Session Resource y Bootstrapping, ¿qué pasa?

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

Siguiente Quiero inicializar mi sesión en mi programa previo:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initSession() 
    { 
     // What goes here!? 
    } 
} 

Mi pregunta es, ¿qué pasa en la función initSession? ¿Qué debería devolver, si algo?

Además, si acabo de iniciar una sesión allí, no reconoce la configuración .ini (por ejemplo, save_path no se modifica). Sin embargo, si mueve el inicio a un controlador, se reconoce la configuración .ini.

EDIT: Una solución posible es:

protected function _initSession() 
{ 
    // Based on http://framework.zend.com/issues/browse/ZF-6651 
    $session = $this->getPluginResource('session'); 
    $session->init(); 
    Zend_Session::start(); 
} 

Respuesta

11

Si utiliza los resources.session.* -options en la configuración de su aplicación que no debe tener un método _initSession() en su arranque ya que el método anulará la ejecución de la recurso de complemento session (Zend_Application_Resource_Session). La única salida de las resources.session.* -opciones en el archivo de configuración garantizará que la sesión se inicialice de acuerdo con sus opciones.

Lea Zend_Application, Theory of Operation para una discusión detallada sobre los llamados métodos de recursos y los recursos de plugins .

7

Stefan tiene razón, está anulando el recurso de sesión predeterminado que hace uso de esas opciones de aplicación.

Si desea definir su propio _initSession() método y seguir teniendo acceso a esas opciones usar algo como:

protected function _initSession() 
{ 
    $options = $this->getOptions(); 
    $sessionOptions = array(
     'save_path' => $options['resources']['session']['save_path'] 
    );  
    Zend_Session::setOptions($options); 
    Zend_Session::start(); 
} 
+0

Algunos error: debe ser '$ sessionOptions = array ( 'save_path' => $ options ['session'] ['save_path'] ); 'y ' Zend_Session :: setOptions ($ sessionOptions); ' – Wizard

3
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(); 
}