如何仅使用会话标识符(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。
答案 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中详细记录了这些细节和更多内容。