如何只使用SID获取当前会话?

时间:2010-10-30 18:30:05

标签: google-app-engine session gae-sessions

如何仅使用会话标识符(SID)检索会话?我正在使用gae-sessions

响应更新@David Underhill:

我已经完成了你的建议,但在调试模式下我得到了这个: Session: SID=None {} |db_key填充了字符串。

这是我的代码:

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

并且不存在。

这是我的Cookie中的SID:

  

“mMumLZOCq5knTg9edaSjLD + p8xsSohAQSS9vyqpgDso = 1289155992_9c2c85c6931a7d133f7e1f0b9ae25502gAJ9cQB9cQEoVQ5hY2NvdW50LmxvZ2dlZHECiFUIdXNlci5rZXlxA1UjYWd0MGIzUjBlWE4zYjNKc1pISUxDeElFVlhObGNoaTNBUXdxBFULYWNjb3VudC5rZXlxBVUnYWd0MGIzUjBlWE4zYjNKc1pISU9DeElIUVdOamIzVnVkQmkyQVF3cQZVDWFjY291bnQuZW1haWxxB1UBdHEIdYZxCS4 =”

我从Cookie中获取此信息,使用JavaScript和Flex,然后将其以变量形式发送到Python。

1 个答案:

答案 0 :(得分:2)

要检索仅使用其SID的会话,请直接实例化Session类:

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

如果要仅使用其会话ID检索会话,则该会话必须已持久保存到数据存储区或内存缓存中。默认情况下,gae-sessions仅在安全cookie中存储小会话,这些会话比memcache或数据存储快得多。

要强制将特定会话保存到数据存储区,您可以在会话对象上调用save(persit_even_if_using_cookie=True)。这将强制它存储到数据存储区/内存缓存区,即使它通常只存储在cookie中。如果您只需要偶尔通过SID访问用户会话,这是最好的方法。

如果您需要经常通过SID访问会话,那么最好在配置时将cookie_only_threshold=0传递给SessionMiddleware来禁用仅限cookie的机制 - 这将确保cookie是从未使用过,并且您的会话始终位于数据存储区中。

gae-sessions documentation中详细记录了这些细节和更多内容。