获取ASP.NET WebForms中超时后的最后一个活动
我有一个带有表单身份验证的ASP.NET WebForms页面。当用户创建登录时,我使用“记住我”来创建身份验证cookie 我现在要做的是检查他们最后一次访问的时间。但是,只有当用户使用登录控件时,LastLogin时间才会更新。当用户的计算机上有身份验证cookie时,他们不需要使用登录控件,并且LastActivity控件会在我的任何代码运行之前更新 看起来我能做到这一点的唯一方法是挂接到应用程序事件应用程序\u AuthenticateRequest-对吗?还是有更好的方法获取ASP.NET WebForms中超时后的最后一个活动,asp.net,webforms,forms-authentication,Asp.net,Webforms,Forms Authentication,我有一个带有表单身份验证的ASP.NET WebForms页面。当用户创建登录时,我使用“记住我”来创建身份验证cookie 我现在要做的是检查他们最后一次访问的时间。但是,只有当用户使用登录控件时,LastLogin时间才会更新。当用户的计算机上有身份验证cookie时,他们不需要使用登录控件,并且LastActivity控件会在我的任何代码运行之前更新 看起来我能做到这一点的唯一方法是挂接到应用程序事件应用程序\u AuthenticateRequest-对吗?还是有更好的方法 谢谢 是,您
谢谢 是,您将要挂接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)
{
}
}
享受吧 相反,我在Global.asax中使用了session_start事件 在这里,我存储了当前和上一次会话的开始日期时间,每次都将当前会话移动到上一次会话。这会获取用户上一次会话的时间
使用session_end可能更好,但这不是用户离开页面的时间,而是他们上次活动后的[timeout]时间,因此这是一个相当好的解决方案。不幸的是,HandleaAuthenticate不好,因为每个页面视图都会调用它。我想知道用户何时有一段时间没有访问该站点,然后又回来了,即他们的会话已过期。所以我想唯一的方法就是使用Session\u End事件。