2010-09-20 60 views
0

我有一個帶有表單身份驗證的ASP.NET WebForms頁面。當用戶創建登錄名時,我使用'記住我'來創建身份驗證Cookie。在ASP.NET WebForms中獲取超時後的最後一個活動

我現在想要做的是檢查他們上次訪問的時間。但LastLogin時間僅在用戶使用登錄控件時更新(在他們的計算機上具有身份驗證Cookie時不需要使用),並且在我的任何代碼運行之前更新LastActivity控件。

它看起來像我可以做到這一點的唯一方法是鉤入應用程序事件Application_AuthenticateRequest - 對嗎?還是有更好的方法來做到這一點?

謝謝!

回答

0

相反,我在Global.asax中使用了session_start事件。

在那裏,我已經在DB中存儲了當前和前一個會話開始日期時間對用戶(每次將當前移動到前一個)。這讓我得到了用戶上一次會話的時間。

使用session_end可能會更好 - 但這不是用戶離開頁面的時間,而是最後一次活動後的[超時]時間 - 所以這是一個相當不錯的解決方案。

0

是的,你會想鉤住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

相關問題