2010-11-30 29 views
3

我有用戶的,因爲他們坐在一個頁面上太久誰正在失去他們的數據,然後被要求重新登錄我要做到以下幾點:。如何攔截在ASP.net網頁表單的認證請求

1)我不想將它們重定向到登錄頁面,而是要取消當前請求,併爲用戶提供一個彈出式對話框來登錄。

2)當登錄成功時,我希望用戶被髮送回他們的表單,所有數據都完好無損。 (如果請求可以通過而不將它們發送回該表單,則更好,但這是可選的)。

如何攔截這些驗證請求,並向用戶顯示彈出式登錄?

我正在使用ASP.net表單身份驗證。

+0

你是什麼意思1)通過「取消請求」?一旦請求是服務器端,你不能取消它。 – 2010-11-30 23:34:52

+0

你的權利,取消不是正確的詞。我只是不希望表單數據被刷新。 – MAW74656 2010-12-01 14:42:55

回答

2

您可以在Global.asax中

上Application_AuthenticateRequest攔截此事件但是,你需要更具體的,您使用的是ASP.NET窗體身份驗證?

補充:

試試這個,你是否使用了母版頁回覆我

在Global.asax中

void Application_AuthenticateRequest(object sender, EventArgs e) 
{ 

    if (HttpContext.Current.User == null) 
    { 
     FormsAuthenticationTicket ticket = new 
         FormsAuthenticationTicket(1, "Anonymous", DateTime.Now, DateTime.Now.AddMinutes(30), false, "Anonymous"); 

     string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

     HttpCookie cookie = 
      new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 

     Response.Cookies.Add(cookie); 

     FormsIdentity id = new FormsIdentity(ticket); 

     System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, ticket.UserData.Split(new char[] { '|' })); 

     Context.User = principal; 
    } 

} 

在Web表單

string cookieName = FormsAuthentication.FormsCookieName; 

    HttpCookie authCookie = Context.Request.Cookies[cookieName]; 

    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

    if (authTicket.UserData == "Anonymous") 
    { 

     //Throw the login popup 

    } 
    else 
    { 

     //Some Code 

    } 
+0

是的,我是。對不起,我補充說。你能否詳細說明在該事件中如何攔截?我在global.asax中有一些未處理的異常處理,所以我已經使用了一些,但不是那個事件。 – MAW74656 2010-11-30 19:00:21

0

?當需要登錄時,您可以重定向到那裏,而不是單獨的登錄頁面。在主頁面的登錄代碼中,您決定是否重定向到正確的獨立登錄頁面,或者使登錄div可見爲彈出窗口。