在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!

+0

不幸的是,handleAuthenticate并不好,因为这被称为每一个页面视图。我想知道用户何时未到达网站然后回来 - 即他们的会话已过期。所以我想唯一的方法是使用Session_End事件。 – 2010-09-21 09:15:24