2009-03-30 5 views
0

私のクライアントは、自分用に構築したシステムのセキュリティ監査を完了しています。asp.netでのユーザーセッション管理

Internet Explorerを使用して同じマシン(または別のマシンのIE)からFirefoxを使用してログインすると、最初のセッションが終了するようにユーザーがログインすると、そのように動作します。

これは、想像するとDBにセッション情報を格納し、アクティブ/非アクティブフラグを設定することで、ユーザーID、セッションID、アクティブなセッションがある場合のステータス、最初のセッションを終了し、 。

多くのおかげで、

エド

+0

お願いします。ユーザーが別のマシン/ブラウザからログインすると、他のブラウザのセッションは終了し、新しいブラウザで続行されますか? –

+0

はい - ユーザーが別のマシン/ブラウザからログインし、他のブラウザのセッションが終了し、新しいブラウザで続行します。 –

+0

@Ian: "Spec"があまりにも緩いです。IEの別のインスタンスを使用するとどうなりますか? IOWは、普遍的に1つのブラウザプロセスだけがユーザに対してアクティブなセッションを持つことができると言っていますか? – AnthonyWJones

答えて

2

初の.NETフレームワークでこれを行うか、誰がなど、いくつかのチュートリアルの方向に私を指すことができるためのメカニズムに組み込まれた任意の追加があります現在使用されているセッションIDを格納するフィールドをusersテーブルに追加します。このIDはコードから簡単にアクセスできます。ユーザーがログインすると、そのIDを保管します。

すべてのページリクエストで、現在のセッションIDがユーザーテーブルに格納されているものと一致することを確認します。一致しない場合は、現在のセッションデータを消去し、ユーザーをログイン画面に戻します。

これは、IE7が各タブで同じインスタンスを使用するため、IE 7で複数のタブを使用することをユーザーが停止することはありません。複数のブラウザインスタンスを使用できなくなります。

これが機能する理由は、各ブラウザに独自のCookieスペースが含まれているためです。セッションIDは、セッションIDを格納しているCookie値に基づいてサーバー側と一致し、各要求時にサーバーに返されます。

ちなみに、これはセッションハイジャックを排除する非常に有効な方法ではありません。セキュリティ監査が防止しようとしているように思えます。それを行う必要がある場合は、質問を更新してください。セッションハイジャックを停止する

UPDATE

一つの方法は、セッション中にして、ブラウザ上のクッキーとして乱数を格納することです。次のリクエストが来たら、クッキーとセッションの値が一致することを確認します。そうでない場合は、userテーブルのsession id変数をリセットします。これにより、すべてのセッションが強制的に再度ログインされます。すべてのページ要求(ポスト/取得)に対して、新しいランダム値を作成します。欠点は、ページをブックマークできないことです。それはおそらく受け入れられるだろう。

+0

提案をいただきありがとうございます - これはうまくいくかもしれませんが、私は "古い"セッションを上書きしてユーザが追い出されないようにしたいと思います。しかし、元のブラウザ/ PCに戻って更新したり、何かにアクセスしようとすると、ログインに戻されます –

+0

これはまさにこれが行うことです。彼らがログインするたびに、最新のセッションIDでユーザテーブルを更新するだけです。古いものが取得または投稿をすると、それが現在ではないことがわかり、ログイン画面にリダイレクトされます。 – NotMe

+0

エド、それは基本的に私がやったことです。最後に勝った場合は、セッションがタイムアウトしてからログインするまで待つ必要があります。 – JoshBerke

0

I bloggedこれについてはどのように扱いますか。基本的には、非永続性のクッキーを作成するというアイディアです。これにはGuidがあります。

これをサーバのある場所(user cache、DB etc ...)のuserIdに関連付けて保存します。次に、数分おきにサーバーにヒットするポーラーがあり、Cookieが値と一致しない場合は、ユーザーをログアウトします。

+0

@Josh - 素敵なアプローチ - –

関連する問題