我的网站有问题。 直到最近,我的网站登录工作完美。 有一天,我不得不对default.aspx(登录站点)和web.config进行一些更改。
突然登录只是每次尝试都成功。 我试图解决它,但它根本不会登录。 在回滚web.config和新创建的default.aspx之后, 它仍然没有用。
我的下一步是检查Authenticate事件。 无论我做什么,登录总是被报告为失败,除了我重新启动Web服务器后的第一次。 所以我开始检查登录是否为假。如果是这样,我调用Membership.ValidateUser来检查用户是否真的失败了。 由于用户几乎从未进行过身份验证,因此Membership.ValidateUser几乎总是会跳转,但只会每隔一次验证一次用户。
看到这一点,我将一些调试信息放入LoginError事件中。 如果用户有效,我连续检查了5次(只是为了确保它没有偶发错误)。 每一次都很好。
因此,Membership.ValidateUser不在authentiocate事件中工作,但在LoginError事件中。 我甚至试图在身份验证事件中两次调用Membership.ValidateUser,但它仍然无法正常工作。
我现在有点迷失了答案。 设置SessionID Cookie,登录成功后设置授权cookie。
这是我的登录控件:
<asp:Login ID="Login1" runat="server" BackColor="#EFF3FB" BorderColor="#B5C7DE"
BorderPadding="4" BorderStyle="Solid" BorderWidth="1px"
DestinationPageUrl="~/checkLogin.aspx" Font-Names="Verdana" Font-Size="1.2em"
ForeColor="#333333" MembershipProvider="AspNetSqlMembershipProvider">
<InstructionTextStyle Font-Italic="True" ForeColor="Black" />
<LayoutTemplate>
<table cellpadding="4" cellspacing="0" width="100%" style="border-collapse:collapse;">
<tr>
<td>
<table cellpadding="0" style="width: 100%">
<tr>
<td align="center" colspan="2"
style="color:White;background-color:#507CD1;font-size:2em;font-weight:bold;">
Anmelden</td>
</tr>
<tr>
<td align="right" valign="middle" style="height: 50px;">
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Benutzername:</asp:Label>
</td>
<td>
<asp:TextBox ID="UserName" runat="server" Font-Size="1.6em"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server"
ControlToValidate="UserName" ErrorMessage="Der Benutzername ist erforderlich."
ToolTip="Der Benutzername ist erforderlich." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Kennwort:</asp:Label>
</td>
<td>
<asp:TextBox ID="Password" runat="server" Font-Size="1.6em" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server"
ControlToValidate="Password" ErrorMessage="Das Kennwort ist erforderlich."
ToolTip="Das Kennwort ist erforderlich." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td colspan="2">
<asp:CheckBox ID="RememberMe" runat="server" Text="Anmeldedaten speichern." />
</td>
</tr>
<tr>
<td align="center" colspan="2" style="color:Red;">
<asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
</td>
</tr>
<tr>
<td align="right" colspan="2">
<asp:Button ID="LoginButton" runat="server" BackColor="White"
BorderColor="#507CD1" BorderStyle="Solid" BorderWidth="1px" CommandName="Login"
Font-Names="Verdana" Font-Size="1.6em" ForeColor="#284E98" Text="Anmelden"
ValidationGroup="Login1" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</LayoutTemplate>
<LoginButtonStyle BackColor="White" BorderColor="#507CD1" BorderStyle="Solid"
BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284E98" />
<TextBoxStyle Font-Size="0.8em" />
<TitleTextStyle BackColor="#507CD1" Font-Bold="True" Font-Size="0.9em"
ForeColor="White" />
</asp:Login>
这是我的控制事件:
Protected Sub Login1_Authenticate(sender As Object, e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
log4net.Config.XmlConfigurator.Configure()
log.Debug("Login: 1." & e.Authenticated.ToString)
If e.Authenticated = False Then
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
log.Debug("Login: 2. Is Valid")
e.Authenticated = True
FormsAuthentication.SetAuthCookie(Login1.UserName, True)
Else
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
log.Debug("Login: 3. Is Valid")
e.Authenticated = True
FormsAuthentication.SetAuthCookie(Login1.UserName, True)
Else
log.Debug("Login: 4. Aint Valid")
e.Authenticated = False
End If
End If
End If
log.Debug("Login: 5. End")
End Sub
Protected Sub Login1_LoginError(sender As Object, e As System.EventArgs) Handles Login1.LoginError
log4net.Config.XmlConfigurator.Configure()
log.Debug("Loginerror: 1. Entry")
Dim a As Integer = 1
Dim user1 As New BenutzerVerwaltung.clsUser("admin")
log.Debug("Loginerror: 2. User1 admin: " & user1.UserName)
Dim user2 As MembershipUser = Membership.GetUser("admin")
log.Debug("Loginerror: 3. User2 admin: " & user2.UserName)
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
log.Debug("Loginerror: 4. Is Valid, Username: " & Login1.UserName.Trim)
Else
log.Debug("Loginerror: 5. Aint Valid, username: " & Login1.UserName.Trim)
End If
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
log.Debug("Loginerror: 6. Is Valid, Username: " & Login1.UserName.Trim)
Else
log.Debug("Loginerror: 7. Aint Valid, username: " & Login1.UserName.Trim)
End If
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
log.Debug("Loginerror: 8. Is Valid, Username: " & Login1.UserName.Trim)
Else
log.Debug("Loginerror: 9. Aint Valid, username: " & Login1.UserName.Trim)
End If
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
log.Debug("Loginerror: 10. Is Valid, Username: " & Login1.UserName.Trim)
Else
log.Debug("Loginerror: 11. Aint Valid, username: " & Login1.UserName.Trim)
End If
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
log.Debug("Loginerror: 12. Is Valid, Username: " & Login1.UserName.Trim)
Else
log.Debug("Loginerror: 13. Aint Valid, username: " & Login1.UserName.Trim)
End If
End Sub
答案 0 :(得分:0)
不幸的是,我无法解决此问题,也没能确定我的线程。
因此,我必须做一些工作才能使我的网站再次正常工作。 登录失败时,我检查用户是否存在于数据库中。如果是这种情况,那么我将授权用户并设置登录Cookies。
If e.Authenticated = False Then
'Init Base User, check if System works
Try
user1 = New BenutzerVerwaltung.clsUser()
Catch ex As Exception
showMessage("Loginfehler: Basis Benutzer")
Exit Sub
End Try
'Check if User exists
Try
user1.loadUser(Login1.UserName.Trim)
Catch ex As Exception
showMessage("LoginFehler: Benutzer Ini")
Exit Sub
End Try
Try
'Manually Validate user and set Authentication Cookies.
If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
e.Authenticated = True
FormsAuthentication.SetAuthCookie(Login1.UserName, True)
Else
e.Authenticated = False
End If
Catch ex As Exception
showMessage("LoginFehler: MB-Framework")
Exit Sub
End Try
End If