获取ASP.NET WebForms中超时后的最后一个活动

获取ASP.NET WebForms中超时后的最后一个活动,asp.net,webforms,forms-authentication,Asp.net,Webforms,Forms Authentication,我有一个带有表单身份验证的ASP.NET WebForms页面。当用户创建登录时,我使用“记住我”来创建身份验证cookie 我现在要做的是检查他们最后一次访问的时间。但是,只有当用户使用登录控件时,LastLogin时间才会更新。当用户的计算机上有身份验证cookie时,他们不需要使用登录控件,并且LastActivity控件会在我的任何代码运行之前更新 看起来我能做到这一点的唯一方法是挂接到应用程序事件应用程序\u AuthenticateRequest-对吗?还是有更好的方法 谢谢 是,您

我有一个带有表单身份验证的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事件。