2008-12-11 17 views
8

Estoy haciendo una aplicación web de php que almacena información específica del usuario que no se comparte con otros usuarios.

¿Sería una buena idea almacenar parte de esta información en la variable $ _SESSION para el almacenamiento en caché? Por ejemplo: almacena en caché una lista de categorías que el usuario ha creado para su cuenta.

Respuesta

10

Este sería un uso adecuado del mecanismo de sesión siempre que se tenga esto en cuenta:

  • sesión no persiste durante un período indefinido de tiempo.
  • Al salir de la sesión, asegúrese de obtener un resultado (ASP.NET devolverá NULL si la sesión ha expirado/borrado)
  • Los reinicios del servidor pueden borrar la caché de la sesión.
  • Haga esto por comodidad, no por rendimiento. Para el almacenamiento en caché de alto rendimiento, elija un mecanismo apropiado (es decir memcached)

Un buen patrón de uso sería como este (galletas éter o sesión):

  • usuario inicia sesión en
  • preferencias Store (color de fondo, los últimos 10 registros observados, categorías) en sesión/cookie.
  • Al representar una página, consulte los valores de Sesión/Cookie (asegurándose de que son valores válidos y no nulos).

cosas no se puede hacer en una galleta

  • No deje ningún objeto sensible (sesión de uso).
  • Un valor de cookie no debe otorgar/negar el acceso a nada (use session).
  • Errores de captura, suponga que los indicadores y las cadenas pueden no ser los que espera, pueden faltar, pueden cambiarse en tránsito.

Estoy seguro de que hay otras cosas a considerar también, pero esto está fuera de mi cabeza aquí.

+0

Leí en alguna parte que memcached no valía la pena para una menor recuperación de datos generales. ¿Es más rápido que usar la sesión? – menko

+0

memcached es donde está almacenando trozos de información para que no tenga que seguir accediendo a un almacén de datos. Esto es para sitios web con mucho tráfico y una de las cosas que comienzas a implementar después de expandir tu aplicación y servidores de DNS. –

+0

memcached es mucho más rápido que una base de datos, pero aún más lento que el acceso $ _SESSION basado en archivos porque debe realizar solicitudes de red en lugar de acceder al disco local. El motivo para usarlo es la coherencia entre varios servidores. –

4

Eso podría funcionar bien para cantidades relativamente pequeñas de datos, sino que tendrá que tomar algunas cosas en consideración:

  1. $ _SESSION se almacena en algún lugar entre las solicitudes, archivo en el disco o base de datos o algo más dependiendo de lo que elija usar (predeterminado en el archivo)
  2. $ _SESSION es local para un solo usuario en una sola máquina.
  3. sesiones tienen un TTL (tiempo de vida), que desaparecen después de un período de tiempo determinado (que controlas)
  4. Bajo ciertas circunstancias, las sesiones pueden bloquear (rara vez un problema, pero me he encontrado que mejora de Flash) Si varios usuarios tienen acceso a los datos que desea almacenar en caché, es mejor guardarlos en caché por separado.
2

Si solo desea que estos datos estén disponibles durante su sesión, entonces sí. Si quiere que esté disponible mañana, o dentro de 4 horas, debe guardarlo en una base de datos.

Técnicamente puede modificar las sesiones para tener una vida útil muy larga, pero darse cuenta de que si usan una computadora diferente, un navegador diferente o tiran sus cookies perderán el enlace a su sesión, por lo tanto, cualquier cosa seria debería crear un tipo de la cuenta de usuario en su aplicación, vincule la sesión a su cuenta y guarde los datos en un lugar filtrado.

Cuestiones relacionadas