Usar memcached para guardar las sesiones de usuario en CakePHP

Usar memcached para guardar las sesiones de usuario en CakePHP

Hace tiempo que he hecho un desarrollo bastante interesante, y todavía no había escrito sobre esta mejora, con la que he conseguido optimizar un poco más el desarrollo web en el que estoy trabajando.

Se traba de guardar las sessiones de usuario en memcached en vez de en disco, que suele ser la configuración por defecto. Memcached es un sistema de cacheo en memoria ram, con la que se consigue evitar escribir en disco y optimizar la respuesta del servidor, ya que la lectura y escritura en ram es mucho más rápido que en disco, esto a modo de resumen rápido y práctico para los que no conozcan esta herramienta.

Para comprobar cual es la configuración por defecto de las sesiones de PHP tendremos que verlo en la configuración del php.ini, lo podremos comprobar con el siguiente comando

cat /etc/php5/apache2/php.ini | grep -i session.save

Puede que el path o la ruta sea diferente al vuestro, esto ya tendréis que adaptarlo vosotros.

Como salida del comando tendremos algo así.

Pulsa para ver a mayor tamaño

En el pantallazo, aparece la configuración por defecto en el archivo, todavía no he cambiado nada en el php.ini.

Para usar las sessiones de PHP con memcached se puede hacer editando y configurando el archivo php.ini cambiando los parámetros generales de PHP, pero esto afectará a todos los proyectos PHP que estén en el servidor donde está corriendo.
Otra opción es sobreescribiendo la configuración de php.ini desde PHP en un determinado proyecto, esto es lo que os enseñaré, a configurar CakePHP para que use memcached. De esta manera el resto de proyectos con PHP no se verán afectados y las sessiones de éstos se seguirán escribiendo en disco.

Nota: Lectura recomendada antes de empezar: Como instalar memcached. Guía de instalación y uso de memcached

Ahora llega lo bueno :), es super sencillo.

En el archivo: app/Config/core.php tendremos que buscar el apartado “Session configuration.” que aparece con comentarios de PHP, hay código y bastantes explicaciones. Al final de esto tendremos que añadir el siguiente fragmento de código. Cuidado, revisar por si ya hay algún tipo de configuración de Session, pues tendremos que quitarla y reemplazar por el nuevo código.

Configure::write('Session', array(
        'defaults' => 'cache',
            'handler' => array(
                'config' => 'sessiones'
            ),
        'cookie' => 'PHPSESSID',
        'timeout' => 3600,
        'cookieTimeout' => 0,
        'autoRegenerate' => false,
        'checkAgent' => true,
        'ini' => array(
            'session.cookie_secure' => false,
            'session.cookie_httponly' => true,
        )
    ));

En los comentarios dentro de la sección “Session configuration” viene una breve explicación de las posibles opciones que se pueden añadir a la configuración. Está en inglés pero las voy a comentar a continuación.

  • `Session.cookie` – El nombre de la cookie que se usa para la sessión. Por defecto en cake es ‘CAKEPHP’, yo he forzado para que aparezca el nombre por defecto que se asigna desde PHP que es PHPSESSID
  • `Session.timeout` – El número en minutos que quieres mantener la sessión activa. Al cambiarlo aquí este tiempo es manejado por CakePHP y no por PHP. Tiene un id de sessión que coincide con el siguiente parámetro y alberga toda la información de session del usuario.
  • `Session.cookieTimeout` – El numero en minutos que quieres mantener la cookie de session que se genera en el navegador del usuario. Esta cookie contiene el valor con el identificador de session que se ha generado para el usuario. Si se borra esta cookie del navegador, el sistema asigna al usuario una nueva cookie con un nuevo identificador y todos los datos de sessión que tenga con la antigua cookie (y sus respectivo identificador) se perderá y si el usuario estuviera logueado en nuestra web se desloqueará

  • `Session.checkAgent` – Define si comprobamos el user-agent del navegador al iniciar la session.
  • `Session.defaults` – Es la configuración básica que se usa en la sesión. Hay 4 configuraciones internas preestablecidas: php, cake, cache, database.
  • `Session.handler` – Se usa para habilitar la personalización del controlador de sessiones. Se tiene que pasar un array con callbacks.
  • `Session.autoRegenerate` – Habilitando esta configuración se activa automáticamente la renovación de la sessión, con lo que el session id cambia frecuentemente.
  • `Session.ini` – Se puede enviar un array con valores adicionales que fuerzan la configuración de los valores de php.ini

En el código anterior hay que prestar especial atención a esta parte

'defaults' => 'cache',
            'handler' => array(
                'config' => 'sessiones'
            ),

En la variable config estoy asignando que tiene que usar la configuración “sessiones”, que está definida en otro array con los valores de conexión de memcache.

Incluir también en app/Config/core.php al final del archivo el siguiente fragmento de código

Cache::config('sessiones', array('engine' => 'Memcache','duration'=> 3600,/*'prefix' =>'es',*/ 'servers' => array('192.168.1.161:11211'), 'compress' => false));

En este array asignamos el identificador “sessiones” a una configuración de tipo memcache donde se especifican la ip y el puerto del servidor de cache así como otros valores que se pueden asignar a los objetos cacheados con el sistema de memcached, tiene otros valores de configuración que podréis chequear en el archivo core.php, que la verdad está muy bien documentado.

Conclusión.

A pesar de que el artículo es un poco largo porque he explicado muchos detalles, para llevar a cabo la integración de las sessiones con memcache en CakePHP tan sólo tendríais que copiar los 2 fragmentos de código y pegarlos en core.php, quizá tengáis que hacer ciertos ajustes en el archivo para dejarlo todo funcionando pero la base son esos 2 fragmentos de código.
Disfrutarlo!!

Tags de búsquedas:

cakephp guardar datos sesion,cakephp saber si usuario inicio sesion,como guardar las publicaciones de usuario en php,explicacion del archivo de core php de cakephp,guardar objetos en memcached,guardar un array en cakephp,numero de sesiones cakephp,pantallazo de configuración de cakephp

Noticias relacionadas »

1 comentario en “Usar memcached para guardar las sesiones de usuario en CakePHP

  1. / Responder

    Es posible con este metodo, compartir sesion, entre dos servidores diferentes?

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Invertir en criptomonedas: »

 

Cómo comprar bitcoin

Invertir y comprar Bitcoin y otras altcoins es más fácil de lo que crees.

1) Si sólo quieres comprar Bitcoin, Ethereum o Litecoin como inversión, tu opción es Coinbase

2) Si quieres probar con otras criptomonedas tu opción es Binance

3) Cualquier duda escríbeme con total libertad al formulario de contacto para resolver dudas: https://www.pedroventura.com/contacto/

¡Comparte este artículo! »

  • Irene (20 horas)
    I used www.zerobounce.net and it is an amazing platform for…
  • Felipe Albornoz (2 días)
    Agradecido. Saludos.
  • Joel (2 semanas)
    Este grupo es buenísimo hay personas de todo el mundo…
  • Citricus (2 semanas)
    Análisis muy buenos y detallados: Crypto Trading Campus https://t.me/cryptotradingcampus
  • Vane (2 meses)
    Hola muy buena información, en lo personal mino con Javascript…
  • Gabriel Roncancio (2 meses)
    Hola Pedro, gracias por compartir. Tu artículo me dió algunas…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
Funciones en PHP no tan usadas pero útiles

Incluso después de trabajar con PHP desde hace muchos años, a veces nos encontramos con funciones y funcionalidades o características...

Cerrar