2016-07-14 6 views
-1

Ich fragte mich, ob jemand mir helfen kann, was ich versucht habe, ist nach einem Mitarbeiter meldet ich möchte ihre staff_id speichern, so dass es in den folgenden Formen verwendet werden kann um sie zu identifizieren, denke ich, dass ich Session verwenden soll, aber ich bin ein bisschen verwirrt. Hier ist meine aktuelle Protokoll in Form Code:So speichern Sie Ergebnisse der SQL-Abfrage in Sitzung

Private sql As New sqlcontrol 
Private AuthUser As String 

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click 

    If sql.HasConnection = True Then 
     If IsAuthenticated() = True Then 
      AuthUser = tbUsername.Text 
      MsgBox("login successful") 

      sql.RunQuery("SELECT staff_level FROM staff WHERE staff_username ='" & tbUsername.Text & "'") 

      If sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 1 Then 
       staffhome.Show() 
       Me.Close() 
      ElseIf sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 2 Then 
       adminhome.Show() 
       Me.Close() 
      End If 
     End If 
    End If 
    'pressing this button checks database for users 
End Sub 

Private Function IsAuthenticated() As Boolean 

    'clear existing records 
    If sql.sqldataset IsNot Nothing Then 
     sql.sqldataset.Clear() 
    End If 

    sql.RunQuery("SELECT Count(staff_username) As UserCount FROM staff WHERE staff_username ='" & tbUsername.Text & "' AND staff_password='" & tbPassword.Text & "' COLLATE SQL_Latin1_General_CP1_CS_AS ") 

    If sql.sqldataset.Tables(0).Rows(0).Item("UserCount") = 1 Then 
     Return True 
    End If 

    MsgBox("Invalid Username or Password.", MsgBoxStyle.Critical, "LOGIN FAILED") 
    Return False 
    'function checks whether username and password combination exists in database 
End Function 

Da ich keine Antworten bekomme ich dachte, ich sollte hinzufügen, was ich versucht habe zu tun, ich habe versucht, eine Unter erstellen, die eine Abfrage ausführt, die Benutzer zu erhalten staff_id speichert dann die Ergebnisse der Abfrage in einer Variablen, die dann in Session gespeichert wird, indem eine meiner anderen Funktionen geändert wird. Ich bezweifle, dass dies das Richtige ist, aber ich habe keine anderen Ideen. Hier ist mein Versuch Code:

Private Sub StoreID()

sql.RunQuery("SELECT staff_id FROM staff where username= " & tbUsername.Text & "") 

    System.Web.HttpContext.Current.Session("staffid") = sql.sqldataset.Tables(0).Rows(0).Item("staff_id") 
End Sub 
+0

Wenn Ihre Frage ist, wie etwas in Session zu speichern, es sieht aus wie Sie wissen, wie das zu tun. Oder ist deine Frage etwas anderes? –

Antwort

0

Es scheint, Sie versuchen, ein Rad neu zu erfinden, nämlich Formularauthentifizierung.

ASP.NET-Mitgliedschaft und ASP.NET Login-Steuerelemente bieten eine Schicht Abstraktion über die Formularauthentifizierung und ersetzen die meisten oder alle der Arbeit, die Sie normalerweise tun würde, um die Formularauthentifizierung zu verwenden.

lesen this article und versuchen Sie es in Ihrem Projekt zu folgen, setzen Sie den Code in seiner Logon_Click() bei Anmeldeseite. Nach der Authentifizierung sollte ASP.NET eine Benutzersitzung erstellen, die in der gesamten Anwendung verwendet werden kann (d. H. Keine Notwendigkeit für benutzerdefinierte IsAuthenticated(), da Sie die Eigenschaft User.Identity.IsAuthenticated verwenden können).

Code Bezug:

  • , wenn Sie sehen keine Ausgabe, die es auf Grund der Tatsache, könnte sein, dass Sie alle möglichen Fälle nicht validieren tun, z.B.

    Was passiert, wenn HasConnection = false?

    If sql.HasConnection = True Then 
    ... 
    End If 
    

    werden Sie keine Ausgabe erhalten.

    Was passiert, wenn staff_level NULL ist?

    If sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 1 Then 
        staffhome.Show() 
        Me.Close() 
    ElseIf sql.sqldataset.Tables(0).Rows(0).Item("staff_level") = 2 Then 
        adminhome.Show() 
        Me.Close() 
    End If 
    

    Sie erhalten keine Ausgabe.

  • Me.Close() ist ein Versuch, das aktuelle Webformular zu schließen? Es ist eine Desktop-ähnliche Codierung und es wird nichts in ASP.NET schließen - loswerden.

  • Stellen Sie sicher, dass staffhome.Show() und adminhome.Show() wie erwartet (das heißt zu den erwarteten Seiten umleiten Response.Redirect() oder Server.Transfer() verwenden). Es klingt wieder wie Sie versuchen, eine Desktop-ähnliche Codierung in ASP.NET zu verwenden.
  • Der Code ist anfällig für SQL-Injektionen
Verwandte Themen