2010-11-30 73 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可见为弹出窗口。