2010-10-30 7 views
2

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

Обновление для ответа @David Андерхилл:

Я сделал то, что вы предложили, но в режиме отладки, я получил это: 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 из моего печенья:

"mMumLZOCq5knTg9edaSjLD + p8xsSohAQSS9vyqpgDso = 1289155992_9c2c85c6931a7d133f7e1f0b9ae25502gAJ9cQB9cQEoVQ5hY2NvdW50LmxvZ2dlZHECiFUIdXNlci5rZXlxA1UjYWd0MGIzUjBlWE4zYjNKc1pISUxDeElFVlhObGNoaTNBUXdxBFULYWNjb3VudC5rZXlxBVUnYWd0MGIzUjBlWE4zYjNKc1pISU9DeElIUVdOamIzVnVkQmkyQVF3cQZVDWFjY291bnQuZW1haWxxB1UBdHEIdYZxCS4 ="

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

ответ

2

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

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

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

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

Если вам нужно часто доступ к сеансам SID, то вы могли бы быть лучше отключить механизм куков только путем передачи cookie_only_threshold=0 к SessionMiddleware при настройке его - это будет гарантировать, что куки никогда не используются, и что ваши сеансы всегда в хранилище данных.

Эти данные и более подробно описаны в документе gae-sessions documentation.

+0

проверьте обновление в моем вопросе. все еще не работает: s Я могу попробовать только cookie_only_threshold = 0 –

+0

После того, как вы выполните 'save (persit_even_if_using_cookie = True)' сеанс должен появиться в хранилище данных. Можете ли вы вручную запросить хранилище данных, чтобы узнать, существует ли сеанс? (Он должен быть единственным, если вы обычно используете только сеансы cookie). Хорошая настройка мышью dirty = True (требуется только в том случае, если вы ничего не изменили в своей сессии - с тех пор, как вы установили пользователя.ключ, вам не нужно устанавливать грязный). –

+0

Да, я проверяю просмотрщик данных и выходы. Я действительно не понимаю, почему я все еще не могу получить свою сессию sid ..: s –

Смежные вопросы