我建议将Application_AuthenticateRequest和ASP.NET Cache结合使用,具体操作如下:
1)当用户被删除时,将用户ID写入ASP.NET Cache中,并在一定时间内保留(例如一天):
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)。
Thread.CurrentPrincipal = anonymousPrincipal
和HttpContext.Current.User = anonymousPrincipal;
的含义是什么?这代表着注销吗? - Thomas