2

私は長い間、プロジェクトでTomcat6.0.26を使用していました。ここで、このプロジェクトでEL 2.2を使用する必要があるため、他の変更を加えずにTomcat 7.0.19に移動しました(RichFaces4.0.0でMojarra2.1.2-b04を使用)。起動すると、a4j:commandButtonまたはh:commandButtonを試すまで、すべて問題ありません。アプリケーションの起動時間が1分未満であっても、ViewExpiredExceptionがスローされます(詳細については、web.xmlで30分のセッションタイムアウトを強制しました)。 。

アプリケーションを機能させる唯一のことは、この設定を変更することです。

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

それはサーバーであり、私はそれをクライアントに変更しましたが、サーバー設定はデータサーバー側を維持し、リクエストごとにクライアントに転送しないようにするのが最善です。

編集:サーバーからクライアントへのViewExpiredExceptionの問題を修正したように見えますが、Webサイトのユーザーログイン機能が機能しなくなりました。ユーザーホームにログインしますが、リンクをクリックすると、ユーザーがロガーではない場合と同じように動作します(SessionScoped ManagedBeanを使用してユーザー情報を保持します)。

誰かこのバグがありますか?

ありがとうございました、

アレックス。

4

1 に答える 1

2

ViewExpiredExceptionビューがセッションに含まれなくなったときに、が表示されます。説明されている症状は、セッションCookieが維持されていないことを示しているため、すべての要求により、サーバーは新しいセッションを作成する必要があります。

Tomcat7.0.19を対象とした最低限のMojarra2.1.2プロジェクトで問題をローカルで再現することはできません。セッションは完全に正常に維持されます。最初のリクエストでのSet-Cookie応答ヘッダーが表示され、同じブラウザセッション内の後続のすべてのリクエストでのリクエストヘッダーが表示されます。それが機能することになっている方法です。したがって、この問題は、少なくともMojarra2.1.2またはTomcat7.0.19に直接関係しているわけではありません。JSESSIONIDCookieJSESSIONID

Firebugを使用して、JSESSIONIDCookieを自分で確認および追跡できます。それが私が最初にすることです。リクエストヘッダーの返送を拒否するのがブラウザであるかCookie(これが当てはまるとは思わない)、またはSet-cookie毎回新しい応答ヘッダーを送信するのがサーバーであるか(これが当てはまると思います)を確認する必要があります。ブラウザがヘッダーを送信したにもかかわらず、セッションを毎回再作成するのが実際にサーバーである場合、それは、コードベースのどこかにCookie誤った呼び出しがあり、それを強制していることを意味するだけです。HttpSession#invalidate()デバッガーを実行して、原因を突き止めます。

于 2011-08-15T13:06:32.163 に答える