Programación

10/07/2013

Zend Framework – Almacenamiento de sesión en base de datos

En este mini tutorial voy a mostrarles como guardar la sesión en base de datos con ZF 1, esto es muy util para manejo de sesiones en un entorno con múltiples servidores.

Material Relacionado

Crear una tabla en la base de datos

Debemos tener en la DB una tabla la cual almacene los datos de sesión.

      CREATE TABLE `session` (
        `id` char(32),
        `modified` int,
        `lifetime` int,
        `data` text,
        PRIMARY KEY (`id`)
      );

Iniciar una sesión en saveHandler application.ini

Acá se definen todos los paramentos los de la base de datos y de sesión.

# Database
 resources.db.adapter = "Pdo_Mysql"
 resources.db.params.host = "localhost"
 resources.db.params.username = "webuser"
 resources.db.params.password = "XXXX"
 resources.db.params.dbname = "test"
 resources.db.isDefaultTableAdapter = true

# 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 = "session"
 resources.session.saveHandler.options.primary = "id"
 resources.session.saveHandler.options.modifiedColumn = "modified"
 resources.session.saveHandler.options.dataColumn = "data"
 resources.session.saveHandler.options.lifetimeColumn = "lifetime"

Iniciamos la sesión en la clase bootstrap

Se necesita agregar el siguiente método en el bootstrap.

/** 
 * Start session 
 */  
public function _initCoreSession()  
{  
    $this->bootstrap('db');  
    $this->bootstrap('session');  
    Zend_Session::start();  
}

Guardar y obtener los valores de sesión

Se puede obtener y guardar los valores de sesion de la siguiente manera!

class IndexController extends Zend_Controller_Action  
{  
    public function indexAction()  
    {  
        // default namespace  
        $namespace = new Zend_Session_Namespace();  
        $namespace->foo = 100;  // Save Value
        echo $namespace->foo;   // Get Value
        // mySpace namespace  
        $namespace = new Zend_Session_Namespace('mySpace');  
        $namespace->foo = 100;  // Save Value
        echo $namespace->foo;   // Get Value
        // action body  
    }  
}

Fuente: http://dionysus.uraganov.net/frameworks/zend-framework-storing-session-in-database/



About the Author

AgeValed
Pablo Ignacio de la Vega Ibañez, también conocido en algunos lugares como AgeValed, el creador de este blog. Actualmente estoy trabajando como Líder Técnico y Supervisor de Equipo en el área de desarrollo PHP.




 
 

 
PHP

Doctrine2 – Getting Started Issues

Luego de querer instalar y hacer funcionar doctrine en nuestro querido y amado Windows, me encontré con un par de problemas, y por lo que vi en internet a varios le paso lo mismo, vamos a tomar como ejemplo el Doctrine –...
by AgeValed
1

 
 

PHP Conference Argentina 2013

El 4 y 5 de Octubre se celebrará, en la Ciudad de Buenos Aires (Argentina), la PHP Conference Argentina, edición local de la conferencia PHP más popular. Esta edición no solamente está destinada a los programadores PHP, ...
by AgeValed
0

 
 

PHP 5.4.0 liberado!

Les comento que ya se encuentra la nueva versión de PHP liberada, la versión 5.4.0, luego de varios updates que se hicieron a la versión PHP 5.3 ya contamos con nuevas versión que incluye (según ellos) un gran núme...
by AgeValed
0

 

 
PHP

PHP – Errores

En este resumen voy a escribir sobre los el control y registro de los errores en PHP. PHP nos permite definir nuestras reglas para controlar los errores, crear errores personificados o como serán registrados/notificados. Tipos...
by AgeValed
0

 
 
PHP

PHP – Funciones

Funciones en PHP, este resumen debería haberlo hecho un par de post antes, pero se me paso, así que mas vale tarde que nunca! Espero que lo sigan disfrutando y que les interese este tipo de post! Mientras alguien lo lea ya es...
by AgeValed
0

 




0 Comentarios


Be the first to comment!


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*