如何拦截ASP.net webform中的身份验证请求

时间:2010-11-30 16:59:23

标签: asp.net authentication webforms login

我有丢失数据的用户因为他们坐在页面上的时间过长,然后被要求重新登录。我想执行以下操作:

1)我不想将它们重定向到登录页面,而是取消当前请求并给用户一个弹出对话框以登录。

2)当登录成功时,我希望将用户发送回他们的表单,所有数据都保持不变。 (如果请求可以通过而不将它们发送回该表单,那就更好了,但这是可选的)。

如何拦截这些身份验证请求,并向用户显示弹出式登录信息?

我正在使用ASP.net表单身份验证。

2 个答案:

答案 0 :(得分:2)

您可以在Global.asax

中的Application_AuthenticateRequest上拦截此事件

但是,您需要更具体,是否使用ASP.NET Forms身份验证?

添加了:

试试这个并回复我

在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;
    }

}

在网络表单中

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

    }

答案 1 :(得分:0)

您使用的是母版页吗?您可以在需要登录时重定向到那里,而不是单独的登录页面。在主页面的登录代码中,您决定是否重定向到正确的独立登录页面,或者将登录div作为弹出窗口显示。