2010-10-30 62 views
2

如何才能只使用其會話標識符(SID)我檢索會話?我正在使用gae-sessions如何僅通過SID獲取當前會話?

爲響應@大衛昂德希爾更新:

我做了你的建議,但在調試模式下,我得到這個: 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 =」

我藉此從餅乾,JavaScript和Flex的,然後把它在一個變量到Python。

回答

2

要檢索只使用它的SID會話,直接實例Session類:

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

如果你想只使用其會話ID來檢索會話,然後該會話必須一直持續到數據存儲或memcache。默認情況下,僅gae-sessions存儲其中是比任何內存緩存或者將數據存儲快得多安全cookie小會議。

要強制特定會話保存到數據存儲,您可以對會話對象調用save(persit_even_if_using_cookie=True)。這將強制將其存儲到數據存儲/ memcache,即使它通常只存儲在cookie中。如果您僅需要偶爾通過SID單獨訪問用戶會話,則這是最佳方法。

如果需要通過SID經常訪問會話,那麼你可能會在您配置時會更好通過傳遞cookie_only_threshold=0SessionMiddleware禁用唯一cookie的機制 - 這將確保Cookie是從來沒有使用過,你的會話始終在數據存儲區中。

這些細節和更多的更徹底的gae-sessions documentation記錄。

+0

簽出在我的問題的更新。仍然不能正常工作:■ 我只能儘量旁邊的cookie_only_threshold = 0 – 2010-10-30 22:30:11

+0

後你的'保存(persit_even_if_using_cookie = TRUE)'會話應該出現在數據存儲中。您可以手動查詢數據存儲以查看會話是否在那裏? (如果你通常只使用cookie會話,它應該是唯一的)。好想法設置髒=真(只有當你沒有改變你的會話中的任何東西 - 因爲你設置用戶。關鍵,你不需要設置髒)。 – 2010-10-30 23:25:51

+0

是的,我檢查數據存儲查看器並退出。我真的不明白爲什麼我仍然無法通過sid獲得我的會話。:s – 2010-10-31 15:14:31