Application_End注销global.asax中的用户
本文关键字:用户 asax global End 注销 Application | 更新日期: 2023-09-27 18:05:20
我想问我可以在Application_End注销用户吗??,我知道当Application_End调用Application_End global.asax
但是我只是想知道在应用程序端让所有用户退出是否正确,我只是想输入用户的注销日期时间。
void Application_End(object sender, EventArgs e)
{
try
{
var LisLoginUsers = db.USER_LOGIN.Where(z => z.LOGOUT_DATETIME == null).ToList();
if (LisLoginUsers.Count != 0)
{
for (int i = 0; i < LisLoginUsers.Count; i++)
{
LisLoginUsers[i].LOGOUT_DATETIME = System.DateTime.Now;
db.SaveChanges();
}
}
}
catch (Exception msg)
{
ExceptionLogging.SendErrorToText(msg);
Response.Redirect("/Account/Error/");
}
}
不可以,您不能使用Application_End在实际站点中记录单点。
因为Application_End事件没有绑定到任何请求,所以有些事情你不能做——你不能对特定的用户或重定向响应(因为没有请求/响应开始)。
确实你可以擦除或批量更新数据库中的信息,但它不会达到你的实际目标,"输入登出日期时间的用户"。
应用程序关闭与任何用户行为无关——它只与出于任何原因停止服务器端代码有关(例如,由于更新或不活动而重新启动站点)。从用户的角度来看,他们可能仍然在浏览页面,并认为自己"登录"了。
如果您的站点有多个服务器,那么当每个服务器重启IIS进程时也没有相关性,使得Application_End
完全不适合"用户注销",因为当其他服务器重新启动时,一个服务器可以积极地处理请求。
最好的办法是显式地让用户会话超时(即从登录开始40分钟),或者通过更新来自页面的每个请求/心跳AJAX ping的时间来滑动过期。