2009-07-11 46 views
19

He estado usando el sistema CodeIgniter por un tiempo, pero it has es short comings. Estoy agradecido por lo que me enseñó, pero ahora necesito una biblioteca para un proyecto nuevo que no codifica y por eso busco ideas sobre qué bibliotecas tienen las cosas correctas y cuáles no. Probablemente tenga que tomar piezas de varias bibliotecas para obtener todo lo que necesito.Mejor biblioteca para sesiones PHP

Acabo de echar un vistazo a la biblioteca Kohana PHP session y me gusta cómo se vuelve a la forma nativa de PHP de usar $ _SESSION superglobal en lugar de forzar un cambio a $ this-> sesión para acceder a los datos.

En cualquier caso, quería saber si había otras buenas bibliotecas de sesión por ahí que podría estar jugando. Hay mucho que se debe manejar en una sesión además de CRUD funcionalmente.

  • Apoyo para la sesión basada en cookies NO pasa (es decir, Facebook o cargadores de Flash)
  • "datos flash" que sólo dura para la próxima carga de la página y luego se auto-elimina.
  • Funciona con $ _SESSION o $ this-> sesión para que los programadores no tengan que cambiar el código existente.
  • Admite establecer una nueva identificación de sesión (es decir, session_id ('nueva identificación')) en caso de que desee cambiar la identificación a mitad de camino a través de la página.
  • Guarda todos los datos al final de la solicitud de página en lugar de cada vez que se agregan o eliminan datos (se guardan consultas DB adicionales).
  • Admite el uso de archivos, cookies o bases de datos para el almacenamiento. (o memcached sería bueno)
  • Intenta denegar el acceso en caso de un secuestro de sesión. (IP, agente de usuario, o fingerprint)

yo acabamos de pasar un poco de tiempo a repasar la lógica para las bibliotecas de sesión CodeIgniter y Kohana y yo le ocurrió la siguiente sobre cómo cada uno comienza y termina sesiones de la página.

/************** 
** Kohana Sessions 
**************/ 
If not native file storage { 
    session_set_save_handler to the storage type (DB, cache, cookie...) 
} 

set the session_name() so php knows what cookie value to check 

start session 

/****** Saving ******/ 

session_write_close() which calls the given handler 


/************** 
** CI Sessions 
**************/ 

Try to read_session() -> { 
    session = Get cookie (if using cookies will also contain data) 

    if(database) { 
     session .= pull data from database 
    } 

    checks if valid... 

    $this->userdata = session data 

} else { 
    create a new one 
} 

/****** Saving ******/ 

session data is serialized either way 

if(cookie) { 
    save cookie with serialized data and params like "last_activity" 
} 
if(database) { 
    save serialized data in db and session in cookie 
} 
+0

+1. Esto ha estado en mi mente por algunas veces ahora. Gracias por explicarlo en detalles – andyk

Respuesta

5

¿Echa un vistazo a Zend_Session?

  • puede pasar el identificador de sesión a través de URL usando la configuración de PHP
  • que pueden caducar ciertas variables de sesión por tiempo o por saltos (solicitudes)
  • migración en otras aplicaciones no será tan fácil y creo no es muy bueno cuando te metes con $_SESSION cuando usas Zend_Session
  • Zend_Session tiene un enfoque basado en adpater para guardar los datos de la sesión. Se incluye un save-handler para bases de datos, pero su arquitectura permite pasar manejadores personalizados.
  • Zend_Session admite validadores para verificar la validez de una sesión. Aquí también tenemos una arquitectura abierta que le permite pasar objetos personalizados para la validación.
  • puede bloquear una sesión, también conocido como haces de sólo lectura
  • puede evitar la creación de instancias de varias instancias del mismo espacio de nombres sesión
  • además hay muchos más por descubrir con Zend_Session tales como la regeneración de los identificadores de sesión, emita remember-me-cookies, revoque remember-me-cookies, etc.
+0

Gracias por el recordatorio. Zend generalmente cubre todas sus bases, por lo que es un gran código para verificar. Sin embargo, en 10 archivos solo para un manejador de sesión, creo que sacaré algunas de las mejores partes para no estropear nada escribiendo el mío. La clase Zend Session parece seguir más cerca de la clase Kohana confiando en $ _SESSION superglobal y configurando manejadores de sesión, lo que definitivamente parece ser el camino correcto. – Xeoncross

3

Puede usar esto en CI: EchoSession.

+0

Gracias, pero como dije, esto no será para un proyecto codeigniter. En realidad, ya había descargado esa biblioteca mientras miraba Zend_Session y muchas otras bibliotecas de sesión. Al revisar el código de cada uno, comienza a surgir un patrón sobre cuáles son las "mejores prácticas" para el manejo de la sesión. – Xeoncross

3

Ok, después de buscar en el lib codeigniter personalizado, no $ _ SESSION, las dos lib de Kohana y Zend (que usan $ _SESSION) y varias otras librerías de sesión de otros proyectos creo que construyo la respuesta a mi problema. Algo que satisface todas las cosas que enumeré arriba (excepto los datos del flash).

Here is the code si alguien quiere usarlo o leerlo mientras construye su propia biblioteca. Dejé muchos comentarios explicando todo el asunto y me encantaría tener algunos comentarios al respecto. Admite tokens, cargadores basados ​​en flash, cookies, regeneración de sesiones cada 5 minutos (o lo que sea que establezca) con la eliminación de sesiones antiguas, y soporte para almacenar sesiones en cualquier base de datos, sistema de archivos, memchache o cualquier otra forma que desee conjunto.

2

Tener una mirada Zebra_Session, a wrapper for PHP’s default session handling functions, using MySQL for storage

  • actúa como un contenedor para las funciones de gestión de sesión por defecto de PHP, pero en lugar de almacenar los datos de sesión en archivos planos que los almacena en una base de datos MySQL, que proporciona una mayor seguridad y un mejor rendimiento

  • es un reemplazo inmediato para el manejador de sesión predeterminado de PHP: las sesiones PHP se usarán de la misma manera que antes de usar la biblioteca; ¡no necesita cambiar ningún código existente!

  • implementa bloqueos de registro, garantizando que los datos se controla correctamente en escenarios con múltiples AJAX concurrente pide

  • un único archivo

  • madura, altamente optimizado y desarrollado constantemente

  • very good documentation