0
同じユーザー名とパスワードのユーザーに対して複数のログインを防止したい。例:ASP.NET MVCの同じアカウントでのユーザーログインを防止する方法
ユーザーアカウント「A」、セッション「AccountA」のログインは作成(約30分)です。ユーザBがアカウント「A」でログインした後、セッション「 "AccountA"」はユーザAのタイムアウトの作成およびセッション["AccountA"]である。
同じユーザー名とパスワードのユーザーに対して複数のログインを防止したい。例:ASP.NET MVCの同じアカウントでのユーザーログインを防止する方法
ユーザーアカウント「A」、セッション「AccountA」のログインは作成(約30分)です。ユーザBがアカウント「A」でログインした後、セッション「 "AccountA"」はユーザAのタイムアウトの作成およびセッション["AccountA"]である。
はい、可能です(考えているほど素晴らしいアイデアではないかもしれませんが)。
ユーザーがサインオンすると、セッション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をリサイクルする必要があります。
アカウントでセッションを使用しない –
どうすればよいですか? –
複数のブラウザで複数回のユーザログインを禁止しないでください。しかし、ユーザがログインしているかどうか( 'if(Request.IsAuthenticated){}')、現在のユーザIDを取得してください([ //stackoverflow.com/a/26739821/5606916))。また、コントローラ/アクションで '[Authorize]/[AllowAnonymous]'属性を使うこともできます。 –