提问人:Mussaib Siddiqui 提问时间:9/2/2016 最后编辑:CommunityMussaib Siddiqui 更新时间:9/2/2016 访问量:1398
Application_End global.asax 中的注销用户
Application_End Logout Users in global.asax
问:
我想问一下我可以在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/");
}
}
答:
0赞
Alexei Levenkov
9/2/2016
#1
不可以,您不能使用 Application_End 在真实站点中录制单曲。
由于Application_End事件不与任何请求绑定,因此有些事情您不能做 - 您不能对特定用户执行操作或将响应重定向到某个地方(因为没有请求/响应开始)。
确实,您可以清除或批量更新数据库中的信息,但无法实现“输入用户注销日期时间”的实际目标。
应用程序关闭与任何用户行为无关 - 它仅与出于任何原因(即由于更新或不活动而重新启动站点)停止服务器端代码有关。从用户的角度来看,他们可能仍然在查看页面并认为自己“已登录”。
如果您有一个具有多个服务器的重要站点,则当每个服务器重新启动 IIS 进程时也没有相关性,因此完全不适合“用户注销”,因为一台服务器可以在其他服务器重新启动时主动处理请求。Application_End
最好的办法是显式(即登录后 40 分钟)或通过更新每个请求的时间/页面中的检测信号 AJAX ping 来超时用户会话。
评论