Как получить текущий сеанс только с SID? - PullRequest
2 голосов
/ 30 октября 2010

Как я могу получить сеанс, используя только его идентификатор сеанса (SID)?Я использую gae-session .

Обновление для ответа @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

и не существует.

А это мой SID из моего cookie:

"mMumLZOCq5knTg9edaSjLD + p8xsSohAQSS9vyqpgDso= 1289155992_9c2c85c6931a7d133f7e1f0b9ae25502gAJ9cQB9cQEoVQ5hY2NvdW50LmxvZ2dlZHECiFUIdXNlci5rZXlxA1UjYWd0MGIzUjBlWE4zYjNKc1pISUxDeElFVlhObGNoaTNBUXdxBFULYWNjb3VudC5rZXlxBVUnYWd0MGIzUjBlWE4zYjNKc1pISU9DeElIUVdOamIzVnVkQmkyQVF3cQZVDWFjY291bnQuZW1haWxxB1UBdHEIdYZxCS4 = "

Я принимаю это от печенья, с JavaScript и Flex, а затем отправить его в переменной в Python.

1 Ответ

2 голосов
/ 31 октября 2010

Чтобы извлечь сеанс, использующий только его SID, непосредственно создайте экземпляр класса Session:

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

Если вы хотите получить сеанс, используя только его идентификатор сеанса, тогда этот сеанс должен были сохранены в хранилище данных или memcache.По умолчанию gae-session хранит только небольшие сеансы в безопасных cookie-файлах, которые намного быстрее, чем memcache или хранилище данных.

Чтобы принудительно сохранить определенный сеанс в хранилище данных, вы можетевызовите save(persit_even_if_using_cookie=True) для объекта сеанса.Это заставит его быть сохраненным в хранилище данных / memcache, даже если он обычно хранится только в cookie.Это лучший подход, если вам нужно только время от времени получать доступ к пользовательским сеансам только по SID.

Если вам нужно часто получать доступ к сеансам по SID, лучше отключить механизм «только cookie», передав * 1014.* до SessionMiddleware при настройке - это гарантирует, что cookie-файлы никогда не используются и ваши сеансы всегда находятся в хранилище данных.

Эти подробности и другие подробности документированы более подробно в gae-документация сессий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...