Foros del Web » Programando para Internet » PHP » Zend »

[SOLUCIONADO] Problemas con la sesión en Zend

Estas en el tema de Problemas con la sesión en Zend en el foro de Zend en Foros del Web. Hola, tengo ya tiempo peleándome con lo siguiente: Tengo una aplicación web en la que por requerimiento de mi cliente quiere tener la posibilidad de ...
  #1 (permalink)  
Antiguo 19/05/2013, 20:46
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 16 años, 5 meses
Puntos: 4
Problemas con la sesión en Zend

Hola, tengo ya tiempo peleándome con lo siguiente:

Tengo una aplicación web en la que por requerimiento de mi cliente quiere tener la posibilidad de que al momento de hacer login pueda elegir entre conectarse a una base de datos u otra.

Para esto deben saber que estoy utilizando Doctrine 1.2 con Zend.

Al principio en el bootstrap tenía el siguiente codigo:

Código PHP:
protected function _initDoctrine()
{    
//Añadir Doctrine al autoloader de Zend
        
$this->getApplication()->getAutoloader()
             ->
pushAutoloader(array('Doctrine''autoload'));

        
//Llamar al autoloader de Doctrine para que cargue los modelos
        
spl_autoload_register(array('Doctrine''modelsAutoload'));

        
//Obtener los parámetros definidos en el archivo appication.ini
        
$doctrineConfig $this->getOption('doctrine');
        
$manager Doctrine_Manager::getInstance();

        
//Definir los atributos de acceso y de carga de modelos
        
$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDEtrue);
        
$manager->setAttribute(
          
Doctrine::ATTR_MODEL_LOADING,
          
$doctrineConfig['model_autoloading']
        );

        
Doctrine_Core::loadModels($doctrineConfig['models_path']);

        
//Crear la conexión a base de datos segun el DSN
        
$conn Doctrine_Manager::connection($doctrineConfig['dsn'],'doctrine');

        
//Definir la forma nativa ENUM
        
$conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUMtrue);
     return 
$conn;

Sin embargo cuando fue necesario hacer este cambio decidí dejar solo esto:

Código PHP:
protected function _initDoctrine()
{
 
//Añadir Doctrine al autoloader de Zend
        
$this->getApplication()->getAutoloader()
             ->
pushAutoloader(array('Doctrine''autoload'));

        
//Llamar al autoloader de Doctrine para que cargue los modelos
        
spl_autoload_register(array('Doctrine''modelsAutoload'));

        
//Obtener los parámetros definidos en el archivo appication.ini
        
$doctrineConfig $this->getOption('doctrine');
        
$manager Doctrine_Manager::getInstance();

        
//Definir los atributos de acceso y de carga de modelos
        
$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDEtrue);
        
$manager->setAttribute(
          
Doctrine::ATTR_MODEL_LOADING,
          
$doctrineConfig['model_autoloading']
        );

        
Doctrine_Core::loadModels($doctrineConfig['models_path']);

Si observamos, lo que ya no hago es definir el dsn de la conexión; esto lo omito porque lo que busco es definir el DSN en un plugin. Esta decisión la tome a partir de que GatorV y masterpuppet me dijeron que no podía manejar sesiones en el bootstrap y que era mejo hacerlo en un plugin.

Entonces lo que busqué hacer fue crear un plugin para definir el DSN a partir de la base de datos que el usuario eligiera; sin embargo cuando en el plugin integro lo siguiente:

Código PHP:
public function preDispatch (Zend_Controller_Request_Abstract $request)
{
$conn Doctrine_Manager::connection("mysql://espacios_user:espacios.2013.db@localhost/espacios_db_test",'doctrine');

Tengo el siguiente error:
Código:
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in /var/www/espacios/library/Zend/Session.php:451 Stack trace: #0 /var/www/espacios/library/Zend/Session/Namespace.php(143): Zend_Session::start(true) #1 /var/www/espacios/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace->__construct('Zend_Auth') #2 /var/www/espacios/library/Zend/Auth.php(91): Zend_Auth_Storage_Session->__construct() #3 /var/www/espacios/library/Zend/Auth.php(141): Zend_Auth->getStorage() #4 /var/www/espacios/application/plugins/Layout.php(8): Zend_Auth->hasIdentity() #5 /var/www/espacios/library/Zend/Controller/Plugin/Broker.php(309): Application_Plugin_Layout->preDispatch(Object(Zend_Controller_Request_Http)) #6 /var/www/espacios/library/Zend/Controller/Front.php(941): Zend_Controller_Plugin_Broker->preDispatch(Object(Zend_Controller_Request_Http)) #7 /var/www/espacios/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front in /var/www/espacios/library/Zend/Controller/Plugin/Broker.php on line 312
Cuando me deshago de esa línea, y la regreso al bootstrap ya no tengo problemas.

Espero haber sido claro, y que producto de esto alguien pueda ayudarme.

Gracias!
__________________
Blog blog.desarrollandoideas.com

Twitter
Sígueme en Twitter
  #2 (permalink)  
Antiguo 20/05/2013, 08:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas con la sesión en Zend

Pues si ves el "camino" de la excepción, se esta lanzando en Zend/Auth, pero en tu plugin al menos no se ve donde estas usando ZendAuth, ¿no estarás llamando dos veces al tu plugin Auth?
  #3 (permalink)  
Antiguo 20/05/2013, 10:45
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: Problemas con la sesión en Zend

Hola GatorV, ya revisé lo que comentas, y pareciera ser que si estoy haciendo dos llamadas; sin embargo nunca han tenido problema entre ellas hasta que integro la linea que comento:

Código PHP:
$conn Doctrine_Manager::connection("mysql://espacios_user:espacios.2013.db@localhost/espacios_db_test",'doctrine'); 
__________________
Blog blog.desarrollandoideas.com

Twitter
Sígueme en Twitter
  #4 (permalink)  
Antiguo 20/05/2013, 12:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas con la sesión en Zend

Es muy extraño ¿que integración estas usando de Doctrine?

Etiquetas: sesión
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:47.