0

GAEベースのWebアプリで永続的なHTTPセッションを処理するための「標準的な」方法があるかどうか疑問に思いました。私の問題を説明させてください。

this.getThreadLocalRequest()。getSession()のみを使用してセッションを取得する場合、ユーザーがブラウザーを閉じると、このセッションは自動的に無効になります。

Cookieを使用する場合(Cookieの有効期限が切れるまで、またはユーザーがCookieを消去するまでセッションが持続するため)、Cookieに保存されているsessionIDが実際に有効なセッションに属していることを検証するための一種のメカニズムが必要です。sessionIDとHttpSessionのキーと値のペアをconcurrentHashMapに格納することを考えましたが、このハッシュマップが現在のインスタンスでのみ使用可能になるという問題が発生したため、整合性の問題が発生する可能性があります。

私が考えた最後の解決策は、データストア内のセッションを追跡することでしたが、リクエストを受信するたびにデータストアにクエリを実行する必要があるのはかなりばかげているようです。

たぶん私は完全に軌道に乗っておらず、私がやろうとしていることを達成するための本当に簡単な方法があります:ブラウザの再起動と複数のgaeインスタンスにわたって持続するHttpセッション。

ありがとう!ロドリゴ。

4

1 に答える 1

2

通常、Cookieを使用してremember-meを実装します。アイデアは、認証されたユーザーに対してランダムで一意のCookieを生成し、それを残りのユーザー情報とともにデータベースに保存して、Cookieをクライアントブラウザーに送信することです。

これで、クライアントが5日後に戻ってくると、Cookieが最初のリクエストとともにアプリケーションに送信されます。このとき、ユーザーがまだ認証されていない場合は、リクエストからCookieを抽出し、データベースでこのCookieを所有しているユーザーを見つけて、ユーザーが資格情報を送信したかのように自動的に認証できます。

このソリューションでは、GAEによるセッションの処理方法を変更する必要はありません。

于 2012-12-28T23:19:18.650 に答える