2

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

更新回复@David Underhill:

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

这是我的代码:

上传.py

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

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

用户.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 =”

我使用 JavaScript 和 Flex 从 cookie 中获取它,然后将其以变量的形式发送到 Python。

4

1 回答 1

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 访问用户会话,这是最好的方法。

If you need to frequently access sessions by SID, then you might be better off disabling the cookie-only mechanism by passing cookie_only_threshold=0 to the SessionMiddleware when you configure it - this will ensure that cookies are never used and that your sessions are always in the datastore.

These details and more are documented more thoroughly in the gae-sessions documentation.

于 2010-10-30T20:41:33.407 回答