2012-03-04 6 views
2

要件: ユーザーは、セッション期間ごとに1回のみログインできます。例えば、2つの異なるマシンからウェブサイトにユーザがログインした場合、ウェブサイトは「アカウントはすでに使用中です。」というメッセージを表示します。これは、ユーザーが2つの異なるブラウザからログインした場合に適用されます。複数のマシンから同じアカウントを使用することを避けるにはどうすればよいですか?

"InProc"セッションを使用するWebアプリケーションで作業しています。アプリは、次の操作を行います

A- When user login, Put Session_ID, user_ID and IP in a table called Sessions. 

B- When Session_End is called, Set the row of Sessions table to be marked InActive. 

C- When Application_Start is called, the web app deactivate all Sessions. 

まず:私はこれが好きではない、それは、データベース内のデッドロックが発生します。私はまだその理由を確認することはできません。

Second:セッションプールのリサイクル時にSession_Endが呼び出されると、MSDNのページに「session_end gurantee」と表示されることがあります。 http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end.aspx

もっと良いアイデアはありますか? Session_Endは毎回と呼ばれますかアプリケーションプールはリサイクルされていますか?私はあなたが持っているものだと思う

おかげ

+1

は20回と無解答を見ると、それはあまりにも複雑ですか?またはあまりにも難しい質問を理解するために! – Costa

+2

注:ユーザーがブラウザを閉じると、前回のセッションが終了するまで再びログインできなくなります。彼らは "バグ"としてそれを記録する前に、ステークホルダーにそれを伝えるようにしてください。 –

答えて

1

は、そのセッションの有効期限が切れたときに、ユーザーがサイトをヒットした場合、これはのみ発生しますしかし、私は、あなたがのSession_Endイベント発火に頼ることができるとは思わない、概念的には正しいです単にブラウザを閉じるのではなく、

また、かなり定期的に実行され、一定の期間が経過した後にセッションテーブルからアイテムを削除するサービスがあります(セッションの作成/更新時に更新される日付フィールドが必要な場合があります) 。あなたがから来ている、しかし、あなたが適切なものを閉じていないことを推測していますデッドロックどこ

が分からない...

+0

"セッションが期限切れになったときにユーザーがサイトにアクセスした場合にのみ発生します。" が正確でない場合、SessionがHTTPヒットに関係なくセッションが破棄または期限切れになると、HttpApplicationインスタンスによってSession_Endが呼び出されます。 – Costa

+0

それかもしれませんが、質問のHans Kestingからのコメントはここで非常に適用されます。 – Paddy

関連する問題