Domanda

Come posso recuperare una sessione utilizzando solo il suo identificatore di sessione (SID)? Sto utilizzando gae-sessioni .

Aggiornamento per la risposta @ David Underhill:

Ho fatto quello che lei ha suggerito, ma in modalità di debug ho ottenuto questo: Session: SID=None {} | ma ha db_key popolato con una stringa.

Ecco il mio codice:

upload.py

SID = self.request.get("SID")
if not SID:
return False

from app.models.user import User
user = User.get_current_user(SID)

user.py

def get_current_user(SID = None):
    if SID:
        session = Session(sid=SID)
    else:
        session = get_current_session()

    if session.has_key('account.logged'):
        return User.get(db.Key(session.get('user.key')))
    else:
        return False

e non esiste.

E questo è il mio SID dal mio biscotto:

  

"mMumLZOCq5knTg9edaSjLD + p8xsSohAQSS9vyqpgDso = 1289155992_9c2c85c6931a7d133f7e1f0b9ae25502gAJ9cQB9cQEoVQ5hY2NvdW50LmxvZ2dlZHECiFUIdXNlci5rZXlxA1UjYWd0MGIzUjBlWE4zYjNKc1pISUxDeElFVlhObGNoaTNBUXdxBFULYWNjb3VudC5rZXlxBVUnYWd0MGIzUjBlWE4zYjNKc1pISU9DeElIUVdOamIzVnVkQmkyQVF3cQZVDWFjY291bnQuZW1haWxxB1UBdHEIdYZxCS4 ="

Colgo l'dai biscotti, con JavaScript e Flex, quindi inviarlo in una variabile di Python.

È stato utile?

Soluzione

Per recuperare una sessione utilizzato solo il suo SID, direttamente un'istanza della classe Session:

session = gaesessions.Session(sid="SID of the session you want")

Se si desidera recuperare una sessione utilizzando solo il suo ID di sessione, quindi quella sessione deve sono stati persistito al datastore o memcache. Per impostazione predefinita, gae-sessioni solo negozi di piccole sessioni di cookie sicuri che sono molto più velocemente di quanto sia memcache o il datastore.

Per forzare una particolare sessione da salvare al datastore, è possibile chiamare save(persit_even_if_using_cookie=True) sull'oggetto sessione. Questo costringerà ad essere conservato al datastore / memcache anche se normalmente sarebbe stato memorizzato solo in un cookie. Questo è l'approccio migliore, se avete solo bisogno di sessioni utente di tanto in tanto di accesso di sola SID.

Se avete bisogno di sessioni di frequente accesso da SID, allora si potrebbe essere meglio disabilitare il meccanismo di cookie solo passando cookie_only_threshold=0 al SessionMiddleware quando lo si configura - Questo farà sì che i cookie non vengono mai utilizzati e che le sessioni sono sempre nel datastore.

Questi dettagli e più sono documentati più a fondo nella href="http://dound.com/myprojects/gae-sessions/docs/html/docindex.html" rel="nofollow"> documentazione .

scroll top