2008-10-24 15 views
12

Je m'interrogeais sur l'implémentation de mes propres sessions (plus pour un exercice qu'autre chose) pour une application GAE que je travaille ... Au début, je pensais utiliser le datastore pour stocker les données de session. Cependant, chaque fois qu'un élément doit être ajouté à la session, il est nécessaire de l'enregistrer dans le magasin de données. Evidemment c'est mauvais puisque nous voulons minimiser nos écritures. Ensuite, j'ai pensé utiliser memcache ... semblait être une bonne idée, mais nous sommes confrontés à des problèmes de corruption de session possible en raison de memcache étant "expulsé par la pression de la mémoire" par Google. Donc, cela veut dire que nous nous retrouvons avec seulement les options suivantes:Comment implémenter efficacement des sessions dans GAE?

  1. Stockage toutes les données de session dans les cookies
  2. écrit toutes les données de session à datastore et memcache, puis la lecture que de memcache

Toute personne avoir d'autres idées?

Répondre

3

Je suggère de vérifier (et de contribuer à) ces trois implémentations de sessions AppEngine avant de déployer votre propre:

Vos options ont l'air bien mais choisir entre les deux dépend probablement de la taille des données de session dans votre application.

+1

@Alexander Kojevnikov: On dirait que le lien AppEngine-utilities est cassé. –

+0

@Brian: Correction, merci! –

+2

Autre chose à considérer: [gae-sessions] (http://wiki.github.com/dound/gae-sessions) est l'implémentation la plus rapide et la plus simple disponible. Une comparaison des bibliothèques disponibles est ici: http://wiki.github.com/dound/gae-sessions/comparison-with-alternative-libraries –

0

Si vous utilisez web2py (version 1.46 ou dernière), les sessions sont activées par défaut sur GAE. Cette atteinte par les trois lignes de code web2py suivantes en haut du modèle scaffoling:

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

Voici une action de l'échantillon qui compte:

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