在ASP.NET WebForms中获取超时后的最后一个活动
问题描述:
我有一个带有表单身份验证的ASP.NET WebForms页面。当用户创建登录名时,我使用'记住我'来创建身份验证Cookie。在ASP.NET WebForms中获取超时后的最后一个活动
我现在想要做的是检查他们上次访问的时间。但LastLogin时间仅在用户使用登录控件时更新(在他们的计算机上具有身份验证Cookie时不需要使用),并且在我的任何代码运行之前更新LastActivity控件。
它看起来像我可以做到这一点的唯一方法是钩入应用程序事件Application_AuthenticateRequest - 对吗?还是有更好的方法来做到这一点?
谢谢!
答
相反,我在Global.asax中使用了session_start事件。
在那里,我已经在DB中存储了当前和前一个会话开始日期时间对用户(每次将当前移动到前一个)。这让我得到了用户上一次会话的时间。
使用session_end可能会更好 - 但这不是用户离开页面的时间,而是最后一次活动后的[超时]时间 - 所以这是一个相当不错的解决方案。
答
是的,你会想钩住FormsAuthenticationModule.Authenticate事件。您可以通过将模块添加到Web应用程序来完成此操作。请参阅以下示例模块代码。
public class BasicAuthenticateModule : IHttpModule
{
public BasicAuthenticateModule()
{
}
public void Dispose()
{
}
public void Init(HttpApplication context)
{
foreach (string name in context.Modules.Keys)
{
if (name == ApplicaionModules.FormsAuthentication)
{
FormsAuthenticationModule module = (FormsAuthenticationModule)context.Modules[name];
module.Authenticate += new FormsAuthenticationEventHandler(module_Authenticate);
break;
}
}
}
private void module_Authenticate(object sender, FormsAuthenticationEventArgs e)
{
}
}
Enjoy!
不幸的是,handleAuthenticate并不好,因为这被称为每一个页面视图。我想知道用户何时未到达网站然后回来 - 即他们的会话已过期。所以我想唯一的方法是使用Session_End事件。 – 2010-09-21 09:15:24