ASP.NET窗体身份验证与Windows的Safari(ASP.NET Forms Authent

2019-08-17 10:36发布

有谁知道为什么ASP.NET窗体身份验证不的Windows版Safari工作,或者更好的是,如何得到它的工作? 这似乎是一个很奇怪的问题。 当我使用一个登录控制(System.Web.UI.WebControls.Login)一切工作正常,但如果我尝试做时,我打电话FormsAuthentication.RedirectFromLoginPage Safari浏览器自定义窗体身份验证登录只是将我回到登录页面,如果我“M未通过身份验证,而其他浏览器登录中的我,送我上我的方式。

protected void lnkLogin_Click(object sender, EventArgs e)
{
    if (Membership.Provider.ValidateUser(txtUsername.Text, txtPassword.Text))
    {
        Session.Clear();
        HttpContext.Current.Response.Cookies.Clear();
        FormsAuthentication.SetAuthCookie(txtUsername.Text, true);
        FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, true);
    }
}

Answer 1:

尝试要么SetAuthCookie,或RedirectFromLoginPage。 重定向需要知道在哪里无论如何重定向(RETURNURL),也许这是你的问题。

    if (Request.QueryString["ReturnUrl"] != null) 
    { 
        FormsAuthentication.RedirectFromLoginPage("someuserid", false); 
    } 
    else 
    { 
        FormsAuthentication.SetAuthCookie("someuserid", false); 
        Response.Redirect("~/SomePage.aspx"); 
    } 


Answer 2:

这工作得很好,我在Safari中:

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        //check login
        User user = UserBAL.GetUser(Login1.UserName, Login1.Password);

        //null and filled object check
        if (user != null && user.Id > 0 && user.Roles != null && user.Roles.Count > 0)
        {

            e.Authenticated = true;

            FormsAuthenticationTicket authTicket = new
            FormsAuthenticationTicket(1,                          //version
                                     Login1.UserName,           // user   name
                                     DateTime.Now,               // creation
                                     DateTime.Now.AddMinutes(60),//  Expiration
                                     false,                      // Persistent
                                     string.Join("|", user.Roles.ToArray())); // User ata


            // Now encrypt the ticket.
            string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
            // Create a cookie and add the encrypted ticket to the
            // cookie as data.
            HttpCookie authCookie =
                         new HttpCookie(FormsAuthentication.FormsCookieName,
                                        encryptedTicket);

            Response.Cookies.Add(authCookie);

            //redirect 
            Response.Redirect(FormsAuthentication.GetRedirectUrl(
                                           Login1.UserName,
                                           false));

        }
        else
        {

            Login1.FailureText = "Login failed.";
        }

    }


文章来源: ASP.NET Forms Authentication with Windows Safari