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

Zend_Session_Save_Handler en el application.ini

Estas en el tema de Zend_Session_Save_Handler en el application.ini en el foro de Zend en Foros del Web. Buenas, pues estoy tratando de hacer que funcione el SessionSaveHandler desde el application.ini, pero algo se me escapa pues no funciona del todo bien, o ...
  #1 (permalink)  
Antiguo 17/08/2011, 03:11
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Zend_Session_Save_Handler en el application.ini

Buenas, pues estoy tratando de hacer que funcione el SessionSaveHandler desde el application.ini, pero algo se me escapa pues no funciona del todo bien, o como yo espero.

Lo tengo en el botstrap, que funciona perfectamente a falta de un par de cosas "que no me hacen caso". Pero requiere tener tambien otra configuración del Zend_Db. Que ya lo tengo en el .ini y para que tenerlo dos veces.

La configuracion del .ini la tengo igual que el del bootstrap, pero curiosamente, el del botstrap si funciona, y el del .ini no.

Solo es para ver si me podeís dar alguna sugerencia de como hacerlo funcionar en el .ini para no tener repetidas la configuración de la DB.

Gracias de antemano.
Saludos,

La config del Bootstrap.php
Código PHP:
Ver original
  1. protected function _initSessionSaveHandler()
  2.     {
  3.         $db = Zend_Db::factory('Pdo_Mysql', array(
  4.             'host'        =>'localhost',
  5.             'username'    => 'user',
  6.             'password'    => 'pass',
  7.             'dbname'    => 'name'
  8.         ));
  9.         Zend_Db_Table_Abstract::setDefaultAdapter($db);
  10.  
  11.         $config = array(
  12.         'name'                => 'Sessions',
  13.         // Esta por ejemplo no funciona, lo guarda en /Applications/MAMP/tmp/php
  14.         'save_path'           => APPLICATION_PATH . "/../sessions",
  15.         'primary'             => array(
  16.                                      'Session_ID',      
  17.                                      'save_path',      
  18.                                      'name',            
  19.                                ),
  20.         'primaryAssignment'   => array(        
  21.                                      'sessionId',        
  22.                                      'sessionSavePath',  
  23.                                      'sessionName',    
  24.                                ),
  25.         'modifiedColumn'      => 'modified',            
  26.         'dataColumn'          => 'Session_data',        
  27.         'lifetimeColumn'      => 'lifetime',            
  28.         );
  29.        
  30.         Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
  31.         Zend_Session::start();
  32.     }

Y el application.ini
Código PHP:
Ver original
  1. ;-- Sessiones
  2.     resources.session.save_path = APPLICATION_PATH "/../sessions"
  3.     resources.session.use_only_cookies = false
  4.     resources.session.remember_me_seconds = 3600
  5.  
  6.     resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
  7.     resources.session.saveHandler.options.name = "Sessions" ; Tabla
  8.  
  9.     resources.session.saveHandler.options.primary.session_id = "session_ID"
  10.     resources.session.saveHandler.options.primary.save_path = "save_path"
  11.     resources.session.saveHandler.options.primary.name = "name"
  12.  
  13.     resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
  14.     resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
  15.     resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
  16.  
  17.     resources.session.saveHandler.options.modifiedColumn = "modified"
  18.     resources.session.saveHandler.options.dataColumn = "Session_data"
  19.     resources.session.saveHandler.options.lifetimeColumn = "lifetime"

Los campos de la tabla
Código:
Session_ID
save_path
name
modified
lifetime
Session_data
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #2 (permalink)  
Antiguo 17/08/2011, 03:45
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Session_Save_Handler en el application.ini

No veo nada raro, la única regla que hay creo que es tener definido antes del resource.session.saveHandler el resources.db, que error te muestra ?, y una sugerencia, deberias seguir alguna convención a la hora de definir los campos y las tablas, te sugiero todo minúscula y como separador "_".

Ah y la opcion que no te hace "caso" es porque no va ahi, esa opcion es para Zend_Session, deberias eliminarla de $config y pasarsela a Zend_Session::start, algo asi:

Código PHP:
Ver original
  1. ...
  2. Zend_Session::start(array('save_path' => APPLICATION_PATH . '/../sessions'));

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 17/08/2011 a las 03:51
  #3 (permalink)  
Antiguo 17/08/2011, 05:22
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Zend_Session_Save_Handler en el application.ini

Hola masterpuppet,
Cita:
Iniciado por masterpuppet Ver Mensaje
No veo nada raro, la única regla que hay creo que es tener definido antes del resource.session.saveHandler el resources.db...
Esto lo tengo configurado y funcionando. Tambien está antes del saveHandler.

Cita:
Iniciado por masterpuppet Ver Mensaje
...que error te muestra ?...
Pues es lo raro, no muestra nada. He quitado la parte del bootstrap, he cambiado algunos datos y nada.

Revisando la clase de Zend, tampoco veo diferecnias entre lo que solicita y los datos que hay en el .ini

Hay alguna forma de forzar a que inicie los datos del .ini en el Bootstrap?

Gracias,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #4 (permalink)  
Antiguo 17/08/2011, 05:41
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Zend_Session_Save_Handler en el application.ini

Acabo de probarlo con un proyecto bacío, sin plugins ni nada, lo básico para comenzar.
Y sigue haciendo lo mismo, con el .ini no funciona y con el bootstrap si...

Creo que algo me estoy saltando y por eso no va.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 17/08/2011, 05:47
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Session_Save_Handler en el application.ini

Cita:
Hay alguna forma de forzar a que inicie los datos del .ini en el Bootstrap?
Algo asi(al inicio del Bootstrap),

Código PHP:
Ver original
  1. protected function _initSessionStart()
  2. {
  3.     $this->bootstrap('db');
  4.     $this->bootstrap('session');
  5.     Zend_Session::start();            
  6. }

Edit, asi tambien deberia valer:

Código PHP:
Ver original
  1. protected function _initSessionStart()
  2. {
  3.     $this->bootstrap(array('db', 'session'));
  4.     Zend_Session::start();            
  5. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 17/08/2011 a las 09:06 Razón: bootstrap from array
  #6 (permalink)  
Antiguo 17/08/2011, 10:34
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Zend_Session_Save_Handler en el application.ini

Al final ha sido mixto, he cargado el recurso de la DB con
Código PHP:
Ver original
  1. $this->bootstrap('db');
Y el resto de la configuración en el bootstrap.
Código PHP:
Ver original
  1. protected function _initSessionSaveHandler()
  2.     {
  3.        
  4.         $config = array(
  5.         'name'                => 'sessions',          
  6.         'lifetime'            => 60 * 60,
  7.         'primary'             => array(
  8.                                      'session_id',      
  9.                                      'save_path',      
  10.                                      'name',            
  11.                                ),
  12.         'primaryAssignment'   => array(
  13.                                      'sessionId',        
  14.                                      'sessionSavePath',  
  15.                                      'sessionName',      
  16.                                ),
  17.         'modifiedColumn'      => 'modified',            
  18.         'dataColumn'          => 'session_data',        
  19.         'lifetimeColumn'      => 'lifetime',            
  20.         );
  21.        
  22.         Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
  23.         Zend_Session::start();
  24.     }
He estado buscando y mucha gente tiene el mismo problema. Casi todos recurren a configurarlos desde el bootstrap como solución.

Gracias por la ayuda

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #7 (permalink)  
Antiguo 17/08/2011, 10:48
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Session_Save_Handler en el application.ini

Que versión de Zend estas utilizando ?, a mi como lo tienes tu no me funciona, me salta una Excepción, yo lo tengo así para que funcione(como array):

application.ini
Código INI:
Ver original
  1. resources.db.adapter = "pdo_mysql"
  2. resources.db.params.host = "localhost"
  3. resources.db.params.username = "root"
  4. resources.db.params.password = ""
  5. resources.db.params.dbname = "test"
  6. resources.db.isDefaultTableAdapter = true
  7.  
  8. resources.session.save_path = APPLICATION_PATH "/../data/session"
  9. resources.session.use_only_cookies = true
  10. resources.session.remember_me_seconds = 864000
  11. resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
  12. resources.session.saveHandler.options.name = "session"
  13. resources.session.saveHandler.options.primary[] = "session_id"
  14. resources.session.saveHandler.options.primary[] = "save_path"
  15. resources.session.saveHandler.options.primary[] = "name"
  16. resources.session.saveHandler.options.primaryAssignment[] = "sessionId"
  17. resources.session.saveHandler.options.primaryAssignment[] = "sessionSavePath"
  18. resources.session.saveHandler.options.primaryAssignment[] = "sessionName"
  19. resources.session.saveHandler.options.modifiedColumn = "modified"
  20. resources.session.saveHandler.options.dataColumn = "session_data"
  21. resources.session.saveHandler.options.lifetimeColumn = "lifetime"

Bootstrap.php
Código PHP:
Ver original
  1. protected function _initSessionStart()
  2. {
  3.     $this->bootstrap(array('db', 'session'));
  4.     Zend_Session::start();            
  5. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 17/08/2011, 11:47
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Zend_Session_Save_Handler en el application.ini

He actualizado el ZF, y he puesto el .ini como indicas y funciona perfecto. Tenía la 1.11.7 o .8

Esa forma de configurar el .ini creo que la tome de la doc de Zend.

Gracias masterpuppet.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #9 (permalink)  
Antiguo 17/08/2011, 12:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Zend_Session_Save_Handler en el application.ini

También si no vas a utilizar la sesión en tu cliente (javascript) te recomendaría agregar esta opción:
Código:
resources.session.cookie_httponly = true
Para evitar que te roben la sesión.
  #10 (permalink)  
Antiguo 17/08/2011, 12:41
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Zend_Session_Save_Handler en el application.ini

Hola GatorV,

Acabo de estar mirando las opciones de los resorces en la doc de php, la he visto pero ni me habia parado leerlo. Lo revisaré a ver de que va.

Gracias por la info, ahora mismo se lo adjunto.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: frameworks-y-php-orientado-a-objetos, tabla
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

SíEste tema le ha gustado a 1 personas




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