我建议结合使用 Application_AuthenticateRequest 和 ASP.NET Cache,如下所示:
1) 当一个用户被删除时,将用户 ID 写入 ASP.NET 缓存中,它可以在那里停留一段有限的时间(可能是一天):
string cacheKey = "RecentlyDeletedUserId" + userId;
Cache.Add(
cacheKey,
true,
null,
DateTime.Now.AddDays(1),
null,
CacheItemPriority.Normal,
null
);
2) 在 global.asax 中,您可以添加处理程序,该处理程序在服务器成功接收到表单身份验证票后为每个请求Application_AuthenticateRequest
触发。在此处理程序中,您发出一个廉价的内存缓存请求,以查看该用户是否在最近删除的用户列表中。如果是,您将它们注销并将它们重定向到登录页面。
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;
}
}
这只是将用户替换为匿名用户,从而确保该用户无法在您的网站上执行任何操作。(这种替代方法来自Invalidating ASP.NET FormsAuthentication server side。)