次のように、Application_AuthenticateRequestとASP.NETCacheの使用を組み合わせることをお勧めします。
1)ユーザーが削除されたら、ユーザーIDをASP.NETキャッシュに書き込みます。このキャッシュでは、ユーザーIDを一定期間(おそらく1日)保持できます。
string cacheKey = "RecentlyDeletedUserId" + userId;
Cache.Add(
cacheKey,
true,
null,
DateTime.Now.AddDays(1),
null,
CacheItemPriority.Normal,
null
);
2)global.asaxで、Application_AuthenticateRequest
ハンドラーを追加できます。ハンドラーは、フォーム認証チケットがサーバーによって正常に受信された後、すべての要求に対して起動されます。このハンドラーでは、1つの安価なメモリ内キャッシュ要求を作成して、そのユーザーが最近削除されたユーザーのリストに含まれているかどうかを確認します。そうである場合は、サインアウトしてログインページにリダイレクトします。
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
string cacheKey = "RecentlyDeletedUserId" + userId;
if (Cache[cacheKey] != null)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
}
何らかの理由でリダイレクトアプローチが気に入らない場合は、次のようなアプローチを取ることができます。
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
string cacheKey = "RecentlyDeletedUserId" + userId;
if (Cache[cacheKey] != null)
{
IPrincipal anonymousPrincipal = new GenericPrincipal(new GenericIdentity(String.Empty), null);
Thread.CurrentPrincipal = anonymousPrincipal;
HttpContext.Current.User = anonymousPrincipal;
}
}
これにより、ユーザーが匿名ユーザーに置き換えられるだけで、ユーザーはサイトで何もできなくなります。(この代替アプローチは、ASP.NET FormsAuthenticationサーバー側の無効化によるものです。)