views:

1442

answers:

2

I was wondering about implementing my own sessions (more for an exercise than anything else) for a GAE app I'm working ... at first I was thinking of using the datastore to store the session data. However, every time something needs to be added to the session 'bucket', it would require saving to the datastore. Obviously that's bad since we want to minimize our writes. Then I thought about using memcache ... seemed like a good idea but then we're faced with issues of possible session corruption due to memcache being "evicted through memory pressure" by Google. So does that mean we are left with only the following options:

  1. Storing all session data in cookies
  2. Writing all session data to datastore and memcache, and then only reading from memcache

Anyone have any other ideas?

+2  A: 

I suggest checking out (and contributing to) these two implementations of appengine sessions before rolling out your own:

Your options look fine but choosing between them probably depends on the size of the session data in your application.

Alexander Kojevnikov
@Alexander Kojevnikov: Looks like appengine-utilities link is broken.
Brian M. Hunt
@Brian: Fixed, thanks!
Alexander Kojevnikov
Another one to consider: [gae-sessions](http://wiki.github.com/dound/gae-sessions) is the fastest and simplest implementation available. A comparison of the available libraries is here: http://wiki.github.com/dound/gae-sessions/comparison-with-alternative-libraries
David Underhill
A: 

If you use web2py (version 1.46 or latter) sessions are on by default on GAE. This achieved by the following three lines of web2py code at the top of the scaffoling model:

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

Here is a sample action that counts:

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

related questions