0

次のコードを使用して、セッションが有効かどうかを確認することにより、GWT セッションにタイムアウトを追加しようとしています。

public boolean isSessionAlive() {
     return System.currentTimeMillis() - getThreadLocalRequest().getSession()
.getLastAccessedTime() < timeout;
}

このコードは、このなどの GWT セッションの Web で見た多くの例に基づいています。

上記のコードは、ローカル Web サーバーで実行している間はうまく機能しますが、プロジェクトを App Engine にデプロイした後は機能しません。以下は、App Engine では常に 0 を返します。

getThreadLocalRequest().getSession().getLastAccessedTime()

私の知る限り、最終アクセス時刻は RPC 呼び出しごとに更新されます。何度か呼び出しを行いましたが、この値はゼロのままで、正しくない結果が返されます。

この問題を解決する方法を知っている人はいますか?

4

2 に答える 2

3

GAE にデプロイすると状況が変わる

ちょうど今日、@roman irani によるアプリ エンジンに関するセッションに参加しました。

App Engine は分散アーキテクチャであるため、Java EE との違いは、リクエスト処理中に前のリクエストと同じアプリケーション サーバー インスタンスが保証されないことです。オブジェクトは memcache で正しくシリアライズされていますが、メモリが共有されていないため、毎回 setAttribute() を呼び出す必要があります。

セッションを処理するためにここにカット画像をクリアします

于 2013-04-21T18:13:19.387 に答える
0

回避策を見つけました。war/WEB-INF/web.xml に次のコードを追加すると、セッションが 30 分後に期限切れになります。

<!--  timeout in minutes -->
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

参照: GWT RPC 呼び出しによるセッション タイムアウト

于 2013-04-23T13:12:15.497 に答える