SIDのみで現在のセッションを取得する方法は?
-
27-09-2019 - |
質問
セッション識別子(SID)のみを使用してセッションを取得するにはどうすればよいですか?私は使用しています gae-sessions.
応答の更新@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を使用して、Cookieからこれを取り、変数でPythonに送信します。
解決
SIDのみを使用したセッションを取得するには、直接インスタンス化されます Session
クラス:
session = gaesessions.Session(sid="SID of the session you want")
セッションIDのみを使用してセッションを取得する場合は、そのセッション しなければならない データストアまたはMemcacheに持続しています。デフォルトでは、 gae-sessions MemcacheまたはDataStoreよりもはるかに高速な安全なCookieに小さなセッションを保存します。
特定のセッションをDataStoreに保存するように強制するには、電話することができます save(persit_even_if_using_cookie=True)
セッションオブジェクト上。これにより、通常はCookieにのみ保存される場合でも、DataStore/Memcacheに保存されます。これは、SIDのみがユーザーセッションにたまにアクセスする必要がある場合に最適なアプローチです。
SIDが頻繁にセッションにアクセスする必要がある場合は、合格してCookieのみのメカニズムを無効にする方が良いかもしれません cookie_only_threshold=0
に SessionMiddleware
構成すると、Cookieが使用されないこと、セッションが常にデータストアにあることが保証されます。
これらの詳細などは、より徹底的に文書化されています Gae-Sessionsドキュメント.