3

ユーザーがログアウトリンクをクリックすると、現在のデータベースのsessionScopeマップを簡単にクリアできます。

var iterator=sessionScope.keySet().iterator();
while (iterator.hasNext()) {
  sessionScope.remove(iterator.next());
}

ただし、これは、サーバー上のすべてのNSFではなく、現在のNSFのsessionScope変数のみをクリアします。したがって、別のユーザーとしてログインし、そのブラウザーセッション中に以前にアクセスした他のNSFに移動した場合でも、ブラウザーセッションは以前にログオンしたユーザーのsessionScoped変数を取得します。

アプリケーションが複数のNSFにまたがっている場合、サーバー上のすべてのNSFからブラウザーのセッションをどのようにクリアしますか?

アップデート

話し合いの後、facesContext.getExternalContext()。getRequest()。getSession(false)からセッションを取得し、そのセッションでinvalidate()メソッドを呼び出しました。それは機能しませんでした、それはまだ同じセッションIDを持っていて、スコープされた変数は保持されます。デクランのクッキーの考えが原因だと思います。これは、Notesクライアントでもかなり頻繁に使用されていると思います。

4

2 に答える 2

4

ブラウザ側には「sessionID」というセッションCookieがあります。

ログアウトプロセス中にそのCookieを無効化/クリアするとどうなりますか?

于 2012-02-24T14:21:29.647 に答える
2

別のデータベースのsessionScopeをクリアする方法はわかりませんが、別の方法を検討することもできます。sessionScopeを初期化したユーザーの名前をsessionScopeに格納し、それを初期化しようとしているユーザーの名前と比較します。名前が異なる場合は、sessionScopeをクリアして、再度初期化してください。

于 2012-02-24T13:20:06.057 に答える