2008-10-24 12 views
12

Me preguntaba acerca de implementar mis propias sesiones (más para un ejercicio que cualquier otra cosa) para una aplicación GAE que estoy trabajando ... al principio estaba pensando en usar el almacén de datos para almacenar los datos de la sesión. Sin embargo, cada vez que se necesita agregar algo a la sesión 'cubo', sería necesario guardarlo en el almacén de datos. Obviamente eso es malo, ya que queremos minimizar nuestras escrituras. Luego pensé en usar Memcache ... parecía una buena idea, pero luego nos enfrentamos a problemas de posible corrupción en la sesión debido a que Memcache fue "desalojado por la presión de la memoria" de Google. ¿Quiere decir que nos quedamos con sólo las siguientes opciones:¿Cómo implementar efectivamente sesiones en GAE?

  1. Almacenar todos los datos de la sesión en las cookies
  2. escrito todos los datos de sesión a almacén de datos y Memcache, y sólo la lectura de Memcache

Cualquiera ¿Tienes alguna otra idea?

Respuesta

3

sugiero la comprobación hacia fuera (y contribuyendo a) estos tres implementaciones de sesiones de App Engine antes de desplegar su propia:

Sus opciones se ven bien pero elegir entre ellos probablemente depende del tamaño de los datos de la sesión en su aplicación.

+1

@Alexander Kojevnikov: Parece que appengine-utilidades enlace está roto. –

+0

@Brian: ¡Reparado, gracias! –

+2

Otro a considerar: [gae-sessions] (http://wiki.github.com/dound/gae-sessions) es la implementación más rápida y sencilla disponible. Una comparación de las bibliotecas disponibles está aquí: http://wiki.github.com/dound/gae-sessions/comparison-with-alternative-libraries –

0

Si usa web2py (versión 1.46 o posterior) las sesiones están activadas por defecto en GAE. Esto logra mediante las siguientes tres líneas de código web2py en la parte superior del modelo scaffoling:

from gluon.contrib.gql import * 
db=GQLDB() 
session.connect(request,response,db=db) 

Aquí es una acción muestra que cuenta:

def index(): 
    session.c=session.c+1 if session.c else 1 
    return dict(counter=session.c)