0

私はvb.netログインコントロールの操作に関しては初心者なので、ご容赦ください...

Tp start 私は ASP.net 4.0 と vb.net を使用しています。

わかりましたので、SQL データベースに対してユーザーを検証する単純なログイン コントロールがあります。(私は hostgator でホストしているので、通常の Windows 認証は使用できません)。今私が抱えている最大の問題は、セッションがタイムアウトしてログインページにリダイレクトされた場合、ログインフォームにユーザー名/パスワードを入力しても問題ないということです。ユーザー名とパスワードが間違っているか、ユーザーが存在しませんか?

ログイン コントロールが本当にユーザーを認証していることを確認するにはどうすればよいですか?

どんな助けでも大歓迎です。ありがとう!

Public strLoginErrorMsg As String
Public type As String
Public rowcount As String

Protected Sub login_sbts_Authenticate(sender As Object, e As      System.Web.UI.WebControls.AuthenticateEventArgs) Handles login_sbts.Authenticate
    Dim bauthenticated As Boolean = False
    bauthenticated = isValidUser(login_sbts.UserName, login_sbts.Password)

    If bauthenticated Then

        e.Authenticated = True
    Else
        e.Authenticated = False
    End If
    lblInfo.Text = type
    FormsAuthentication.RedirectFromLoginPage(Me.login_sbts.UserName, True)

    If type = "ADMIN" Then
        Response.Redirect("dailynote.aspx")
    Else
        Response.Redirect("other.aspx")
    End If

End Sub

Private Function isValidUser(ByVal username As String, ByVal pwd As String) As [Boolean]

    Dim con As New SqlConnection("Data Source=localhost;Initial Catalog=sbts-scheduling;User ID=userid;Password=password;")
    Dim cmd As New SqlCommand("select * from tblusers where UserName='" & username & "' and Password='" & pwd & "'")
    cmd.Connection = con
    Dim dt As New DataTable()
    Dim da As New SqlDataAdapter(cmd)
    con.Open()
    da.Fill(dt)
    con.Close()
    If dt.Rows.Count = 0 Then
        strLoginErrorMsg = "Invalid User Name/Password"
        dt.Dispose()
        Return False
    Else
        type = dt.Rows(0).Item("UserType").Trim()
        Session("usertype") = type

    End If
    Return True



End Function

Protected Sub login_sbts_LoginError(sender As Object, e As System.EventArgs) Handles login_sbts.LoginError
    login_sbts.FailureText = strLoginErrorMsg
End Sub
4

1 に答える 1

0

実際には、問題は FormsAuthentication.RedirectFromLoginPage への呼び出しにある可能性があります。ただし、コードを少しクリーンアップする自由を取りました。また、認証方法に FormsAuthentication.SetAuthCookie を追加しました。その Cookie の名前と期間は、web.config ファイルまたは「構成設定」で構成されます。

ASP.NET の既定の FormAuthenticationModule を継承、クリア、および置換する意思がない限り、一部は web.config 構成設定に依存する必要があります。

Public strLoginErrorMsg As String
Public type As String
Public rowcount As String

Protected Sub login_sbts_Authenticate(sender As Object, e As      System.Web.UI.WebControls.AuthenticateEventArgs) Handles login_sbts.Authenticate
    If isValidUser(login_sbts.UserName, login_sbts.Password) Then
        e.Authenticated = True
        FormsAuthentication.SetAuthCookie(login_sbts.UserName, false, "/")    
        lblInfo.Text = type

        If type = "ADMIN" Then
            Response.Redirect("dailynote.aspx")
        Else
            FormsAuthentication.RedirectFromLoginPage(Me.login_sbts.UserName, True)
            'Response.Redirect("other.aspx")
        End If
    Else
        e.Authenticated = false
    End If
End Sub

Private Function isValidUser(ByVal username As String, ByVal pwd As String) As Boolean
    isValidUser = False
    Dim conn As New SqlConnection("Data Source=localhost;Initial Catalog=sbts-scheduling;User ID=userid;Password=password;")
    Dim cmd As New SqlCommand("select * from tblusers where UserName='" & username & "' and Password='" & pwd & "'", conn)
    Using conn
        conn.open
        Using reader As system.data.sqlclient.SqlDataReader = comm.ExecuteReader
           If reader.Count > 0 Then
                'Not Checking for multible records here.
                While reader.read
                    If Not( IsDBNull(reader("UserType")) Then
                        Session("usertype") = reader("UserType").Trim()
                        IsValidUser = True
                    End If
                End While
            End If
        End Using
        If Not( conn.State = State.Close) Then
            conn.Close
        End If
    End Using
End Function

Protected Sub login_sbts_LoginError(sender As Object, e As System.EventArgs) Handles login_sbts.LoginError
    login_sbts.FailureText = strLoginErrorMsg
End Sub

MembershipProvider の継承を検討することをお勧めします。タグのプロパティでプロバイダーを指定するだけなので、asp サーバー タグの操作が少し簡単になります。(web.config、app.config ..またはIISを介して適切に参照および構成した後(信頼できるプロバイダーになるには、グローバルキャッシュアセンブリと他のすべてのループに配置する必要があります。)

于 2013-07-12T05:34:21.010 に答える