3

gae -sessionsまたはwebapp2sessionsのいずれかを使用して、 GoogleAppEngineのセッションサポートを実装することを検討しています。しかし、私はそれがどのように機能するのか本当に理解していません。サンプルコードでは、彼らが行うほとんどの作業は次のとおりです。

 session = get_current_session()

セッションの全体的なポイントは、ユーザーを認証することだと思いました。これが私の状況です:

ユーザーはログインしたときにのみiOSアプリを使用できます。ユーザーが初めてログインした後は、認証のためにユーザーのパスワードを毎回送信するのではなく、これがセッションIDの目的であると読みました。では、これらのフレームワークを使用してこれを行うにはどうすればよいですか?

  • 何かIDがあるはずじゃないの?
  • ログインに成功した後、クライアントに何を送り返しますか?
  • get_current_sessionは、ユーザーが誰であるかをどのように知るのですか?
  • クライアントはリクエストごとにサーバーに何を送信しますか?
  • ユーザーが複数のデバイスからサインインしている場合はどうなりますか?

クライアントはブラウザではなく、モバイルアプリケーションであることに注意してください。この場合、これがどのように機能するのか理解できません。

4

3 に答える 3

4

セッションの全体的なポイントは、ユーザーを認証することだと思いました。

いいえ、セッションは同じブラウザに属するリクエストを識別するために使用されます。ユーザーを識別または認証しません。これはあなたのコードの仕事です。セッションは通常Cookieを介して機能します。最初のリクエストでサーバーがCookieを送信し、その後のすべてのリクエストでブラウザがCookieをリクエストに追加します。これにより、サーバーは一連の要求が同じクライアント(ブラウザー)に属していることを認識します。これがあなたのケースで機能するためには、AndroidコードはCookieを使用する必要があります

何かIDがあるはずじゃないの?

はい、ログイン後、通常はユーザーIDを取得しますが、これはログイン手順に固有のものです。また、これはセッションとは何の関係もありません。セッションは基本的にサーバー側のオブジェクトであり、リクエストが同じクライアントから送信された場合は常に同じです。一部の属性をセッションオブジェクトに保存できます。通常、ユーザーがログインを実行した後、同じユーザーからのリクエストを簡単に識別できるように、ユーザーIDをセッションに保存します。ユーザーがログアウトするときは、セッションからユーザーIDを削除します。

ログインに成功した後、クライアントに何を送り返しますか?

サーバーでセッションを有効にし(=ライブラリを選択、AndroidコードでCookieを有効にします。その後、セッションはクライアントとサーバー間で自動的に処理されます。ログインに成功したら、ユーザーIDをセッションに保存するだけです。以降のリクエストでは、セッションにユーザーUDが含まれているかどうかを確認してください。

get_current_sessionは、ユーザーが誰であるかをどのように知るのですか?

そうではありません。ログイン後、ユーザー関連のデータをセッションに保存し、その後のリクエストでこのデータを確認できます。

クライアントはリクエストごとにサーバーに何を送信しますか?

セッションが機能するには、Cookieを送信する必要があります。Android HttpClientコード(上記のリンク)でCookieのサポートを有効にすると、これは自動的に行われます。

ユーザーが複数のデバイスからサインインしている場合はどうなりますか?

複数のクライアントは、複数の独立したセッションになります。同じユーザーに属するセッションを識別するのはサーバーコード次第です(=複数のセッションには同じユーザーIDが保存されます)。

于 2012-08-31T08:16:00.467 に答える
0

webapp2を使用して認証を処理できます。webapp2_extrasにはauthというモジュールがあります。登録、ログイン、ログアウトに役立ちます。

これが私の詳細な答えです:

Android/iPhoneを使用したGoogleAppEngineでのセッションの処理

AppEngineでログインしたら。認証Cookieを保存し、それをサブシーケンス要求に送信する必要があります。サーバー側では、ユーザーが次のユーザーによってログに記録されていることを確認できます。

from webapp2_extras import auth
if auth.get_user_by_session():
    #Logged in      
else:
    #Not logged in

注:Androidを使用している場合のもう1つの簡単なアプローチは、サーバー側でGoogle認証を使用し、AERC(Android用App Engine Rest Client)を使用してサーバーでの認証を支援することです。

それが役に立てば幸い :)

于 2012-08-31T03:39:48.877 に答える
0

最初にHTTPCookieを読んでくださいhttp://en.wikipedia.org/wiki/HTTP_cookie

セッションは、実際にはサーバー上の単なるデータオブジェクトです。Python辞書と考えてください。データストアとmemcacheに永続化する必要があります。ある種のIDがあり、通常、サーバーとブラウザの間でやり取りされるHTTPCookieに保存されます。

セッション処理ライブラリは、リクエストを受信すると、基本的に次のことを行います。-Cookieを確認し、セッションIDを取得します-それ-データストアまたはmemcacheからそのIDのセッションデータを引き出し、「request」オブジェクトに挿入します。

また、データの保存やCookieが改ざんされていないことの確認などの簿記も処理します。

使用するセッションライブラリによっては、セッションをユーザーに関連付けるのはあなた次第です。多くの場合、セッションをユーザーに明示的に関連付ける必要は必ずしもありません。ユーザーが複数のブラウザでサイトにアクセスしている場合、1人のユーザーに対して複数のセッションが存在する可能性があります。ただし、ユーザーがログアウトしたときにセッションを終了し、新しいユーザーがログインしたときに新しいセッションを開始するように注意する必要があります。

セッションは通常使い捨てであるため、最終的にはデータストアに未使用または期限切れのセッションが大量に存在することになります。それらをクリーンアップするために何かが必要になります。

モバイルアプリに関する限り、はい、モバイルアプリはブラウザのように動作し、Cookieデータを保存し、リクエストごとにサーバーに戻す必要があります。android HttpURLConnectionを使用している場合は、オプションのCookieManagerを使用してこの部分を処理します。

于 2012-08-31T18:54:17.140 に答える