Glassfish3.1のJSFログインフォームでセッション固定を防ぐ方法を見つけようとしています。サーブレットを使用するのは簡単だったので、JSFでも同じことをしようとしています(この質問に基づいて:JSF要求からセッションID値を取得する):
FacesContext fCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
session.invalidate();
fCtx.getExternalContext().getSession(true);
動作しているようですが、ブラウザの戻るボタンをクリックしてログインの詳細を再入力すると、次のように表示されます。
javax.faces.application.ViewExpiredException:viewId:/index.xhtml-ビュー/index.xhtmlを復元できませんでした。
「更新」して再送信した後にのみ、再び機能します。
その理由は何でしょうか?