2010-10-30 6 views
2

Comment puis-je récupérer une session en utilisant uniquement son identifiant de session (SID)? J'utilise gae-sessions.Comment obtenir la session en cours avec seulement le SID?

mise à jour pour la réponse Underhill @ David:

je l'ai fait ce que vous suggérez, mais en mode débogage je suis arrivé ceci: Session: SID=None {} | mais il a db_key peuplé avec une chaîne.

Voici mon code:

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 

et n'existe.

Et ceci est mon SID de mon cookie:

"mMumLZOCq5knTg9edaSjLD + p8xsSohAQSS9vyqpgDso = 1289155992_9c2c85c6931a7d133f7e1f0b9ae25502gAJ9cQB9cQEoVQ5hY2NvdW50LmxvZ2dlZHECiFUIdXNlci5rZXlxA1UjYWd0MGIzUjBlWE4zYjNKc1pISUxDeElFVlhObGNoaTNBUXdxBFULYWNjb3VudC5rZXlxBVUnYWd0MGIzUjBlWE4zYjNKc1pISU9DeElIUVdOamIzVnVkQmkyQVF3cQZVDWFjY291bnQuZW1haWxxB1UBdHEIdYZxCS4 ="

Je profite de biscuits, avec JavaScript et Flex, puis de l'envoyer dans une variable à Python.

Répondre

2

Pour récupérer une session utilisée seulement son SID, instancier directement la classe Session:

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

Si vous souhaitez récupérer une session en utilisant uniquement son ID de session, puis cette session doit ont été persisté au banque de données ou memcache. Par défaut, gae-sessions stocke uniquement de petites sessions dans des cookies sécurisés qui sont beaucoup plus rapides que memcache ou le magasin de données.

Pour forcer l'enregistrement d'une session particulière dans la banque de données, vous pouvez appeler save(persit_even_if_using_cookie=True) sur l'objet de session. Cela le forcera à être stocké dans le magasin de données/memcache même s'il ne serait normalement stocké dans un cookie. C'est la meilleure approche si vous avez seulement besoin d'accéder occasionnellement aux sessions utilisateur par SID seul. Si vous avez besoin d'accéder fréquemment aux sessions par SID, alors vous feriez mieux de désactiver le mécanisme des cookies seulement en passant cookie_only_threshold=0 au lorsque vous le configurez - cela garantira que les cookies ne sont jamais utilisés et que vos sessions sont toujours dans le magasin de données.

Ces détails et d'autres détails sont documentés plus en détail dans le gae-sessions documentation.

+0

consultez la mise à jour dans ma question. ne fonctionne toujours pas: s Je ne peux essayer que le cookie_only_threshold = 0 –

+0

Après avoir fait 'save (persit_even_if_using_cookie = True)' la session devrait apparaître dans la banque de données. Pouvez-vous interroger manuellement le magasin de données pour voir si la session est là? (Il devrait être le seul si vous utilisez généralement des sessions cookie uniquement). Bon réglage de la pensée sale = Vrai (uniquement nécessaire si vous n'avez rien changé dans votre session - depuis que vous avez défini l'utilisateur.clé, vous n'avez pas besoin d'être sale). –

+0

oui, je vérifie dans la visionneuse de banque de données et quitte. Je ne comprends vraiment pas pourquoi je ne peux toujours pas obtenir ma session par sid ..: s –

Questions connexes