2017-02-14 24 views
0

同じユーザー名とパスワードのユーザーに対して複数のログインを防止したい。例:ASP.NET MVCの同じアカウントでのユーザーログインを防止する方法

ユーザーアカウント「A」、セッション「AccountA」のログインは作成(約30分)です。ユーザBがアカウント「A」でログインした後、セッション「 "AccountA"」はユーザAのタイムアウトの作成およびセッション["AccountA"]である。

+2

アカウントでセッションを使用しない –

+0

どうすればよいですか? –

+0

複数のブラウザで複数回のユーザログインを禁止しないでください。しかし、ユーザがログインしているかどうか( 'if(Request.IsAuthenticated){}')、現在のユーザIDを取得してください([ //stackoverflow.com/a/26739821/5606916))。また、コントローラ/アクションで '[Authorize]/[AllowAnonymous]'属性を使うこともできます。 –

答えて

0

はい、可能です(考えているほど素晴らしいアイデアではないかもしれませんが)。

ユーザーがサインオンすると、セッションIDをユーザーIDにバインドするアプリケーション状態に値を格納します。

var context = HttpContext.Current; 
var lookup = String.Format("Session_{0}", userID); 
Application.Lock(); 
Application[lookup] = context.Session.SessionID; 
Application.Unlock(); 

ユーザーがページを要求している(サインオンしていない)場合、バインディングが正しいかどうかを確認します。そうでない場合は、セッションを終了します。

ユーザーがページにアクセスしようとすると、間違ったセッションIDを持って、彼のセッションは殺される
var context = HttpContext.Current; 
var lookup = String.Format("Session_{0}", userID); 
var sessionID = Application[lookup] as string; 
if (sessionID != context.Session.SessionID) 
{ 
    context.Session.Abandon(); 
    var c = new HttpCookie(FormsAuthentication.FormsCookieName,"DELETED"); 
    c.Expires = System.DateTime.Now.AddDays(-2); 
    context.Response.AppendCookie(c); 
    context.Response.Redirect("~/logout.aspx"); 
} 

このトリックは...あなたのアプリケーションの状態は、ユーザーがサインオンするにつれて増加し続けます。ユーザーがサインオフしていつクリーンアップするかを検出する手段を工夫するか、定期的にAppPoolをリサイクルする必要があります。

関連する問題