7

私はjsfでSpring 3(注釈)を使用しており、セッションを作成する方法と後でそれを無効にする方法を知っています...

ログインして最後にログアウトボタンを使用すると、すべてがうまく機能します。しかし問題は、ログアウトボタンをクリックしないとセッションが残ることです。別のユーザーでログインすると、古いセッション データが残ります。これは、古いセッションが無効化されていないためです。

古いセッションが無効化されていない場合、システムに新しいセッションを強制的に作成させるにはどうすればよいですか?

4

3 に答える 3

4

スティーブの答えは良いです。もう少しコンテキストを追加するために、セッション固定攻撃に対するベスト プラクティスとして、ユーザー認証イベントの後に常に無効にして新しいセッションを作成する必要があります。

やりたいことを達成する別の方法は、Spring Security を使用することです。考慮したかどうかはわかりませんが、デフォルトでは、ユーザーがログインするたびに新しいセッションの無効化と生成を処理します。また、役に立つかもしれないし、役に立たないかもしれない他の機能もあります。次のリンクが役立つ場合があります: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/ns-config.html。あなたの質問に関連する情報については、セクション「3.3.3 /セッション固定攻撃保護」までスクロールしてください

于 2012-04-09T17:30:44.213 に答える
0

ログアウト後に新しいセッションを作成するには、セッションが古いsession.isNew()かどうかを確認してからを呼び出します。logout メソッドを/loginマッピングにリダイレクトします。セッションをチェックし、メソッドを呼び出すと新しいセッションを作成しますinvalidate() invalidate()

ログアウトコード:

@RequestMapping("/logout")
public String logout() {
    return "redirect:/login";
}

ログインコード:

@RequestMapping(value = "/login")
public String login(HttpServletRequest request, HttpSession session) {
    /*
     * create new session if session is not new
     */
    if (!session.isNew()) {
        session.invalidate();
    }
    return "login";
}
于 2016-05-03T09:12:49.697 に答える