1

Web アプリケーションに struts2 を使用しています。現在、セッション管理のために、実際にはユーザー ID (つまり DB 識別子) をセッションに保持しており、ログアウト中に、このユーザー ID をセッション オブジェクトから削除します。私たちのセッション オブジェクト (ユーザー ID をカプセル化) は、セッション対応インターフェイスを実装しているため、セッション マップですべてのセッション関連情報を自動的に取得すると思います。

私の基本的な恨みは、ログアウトすることです。session.invalidate() のように、セッションからユーザー ID を削除するだけで、セッションを実際に「無効化」するわけではありません。

私は struts2 に不慣れで、私が説明しているこの製品のプロトタイプにも不慣れです。セッションからユーザーIDを削除するだけで十分かどうか、そうでない場合はどのようなセキュリティ上の危険があるか教えてください。ログアウト時に session.invalidate も行う必要がありますか?

4

2 に答える 2

0

ほとんどの場合、セッションからユーザーIDを削除するだけで、ユーザーがサインアウトしていることをアプリケーションに通知できます。可能であれば、他のすべてのセッション変数を削除し、セッションCookieを無効にすることもお勧めします。これにより、ユーザーIDが設定されているかどうかを最初に確認せずに、コードで他のセッション変数を使用した場合の予期しない動作を防ぐことができます。

私は通常、ユーザーがサインインしていることを示し、ユーザーが誰であるかを知らせるために、ユーザーIDをセッションに保存します。この値が設定されていない場合は、ユーザーをサインインページに移動します。

于 2012-04-09T05:58:52.683 に答える
0

session.invalidate();セッション属性に空の値を設定するだけで十分です (属性を削除する必要もありません!) 。チェックは次のようになります。

if( is the attribute present is session)
    if( is the value of attribute null) {
         go to login page;
    }
    else {
        go to welcome page;
    }
}
else {
     go to login page;
}

使用session.invalidate()すると、ログアウトしたユーザーに有効なセッションがないことを伝えていることになります。彼は私たちのウェブサイトへの呪いです:))

更新: HTTPSessionドキュメントから

無効にする()

このセッションを無効にしてから、それにバインドされているすべてのオブジェクトをアンバインドします。

そのため、session.invalidate() の後にセッション スコープ (存在する場合) に格納されている変数にアクセスしようとすると、エラーが発生します。

于 2012-04-09T07:30:57.510 に答える