2016-09-09 1 views
2

So möchte ich den Benutzer anmelden und ihren Benutzernamen am oberen Rand der Seite angezeigt werden, wenn sie angemeldet sind. Ich überprüfe, ob sie vorhanden sind in der Datenbank zuerst, dann ließ ich sie in, so dass, wenn sie den Login-Button klicken tut es so etwas wie dieses (Button Ereignis)Wie verwende ich Sitzungsobjekte in ASP.NET (mit Visual Basic)

If (IsPostBack) Then 

      connection.Open() 
      command.Connection = connection 

      command.CommandText = "select count(*) from customer where Email='" & TextEmail.Text & "' AND Password='" & TextPassword.Text.Trim & "'" 
      counts = Convert.ToInt32(command.ExecuteScalar.ToString) ' execute this text as an SQL query 

      If (counts > 0) Then 
       Response.Redirect("Default.aspx", False) 
       Session("Username") = TextEmail.Text 'This is where i try to use the session storing the user's email (which i use as a username) 
      Else 
       Label1.Visible = True 
      End If 

      connection.Close() 
     End If 

Above Code funktioniert gut, kein Problem hat. In C# .Net Dies wäre Session ["Benutzername"] = TextEmail.Text rechts.

So, jetzt gibt es ein Formular in meinem Projekt, auf das Sie ohne Anmeldung nicht zugreifen können. Wenn diese Seite geladen wird, möchte ich überprüfen, ob der Benutzer angemeldet ist oder nicht, wenn nicht, leite ich sie auf die Anmeldeseite um, wenn sie eingelesen werden, und aktualisiere das Etikett, das "eingeloggten Benutzer userEmail" anzeigt , der Page_Load-Code ist wie folgt aus:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Try 
     If Not (Session("Username") = vbNull) Then 
      LogInStatus.Text = "logged in user " & System.Web.HttpContext.Current.Session("Username").ToString 
     Else 
      Response.Redirect("Login.aspx", False) 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
End Sub 

Es wird ein Logout sein, die, wenn sie angeklickt ich die Session auf die Login-Seite, um sie dann wieder eingestellt wird auf null und einmal umleiten. so, wenn sie dies geschieht

Session("Username") = vbNull 
     Response.Redirect("Login.aspx", False) 

Wenn ich den Code ausführen auf logout, bekomme ich diese Ausnahme Nullreference image here Offensichtlich entweder bin Initialisierung i das Objekt falsch, oder ich bin einfach es gerade die falsche Art und Weise verwendet wird. Aber all das funktioniert mit C#. Bitte helfen Sie.

+0

versuchen zu konvertieren 'Convert.ToString (System.Web.HttpContext.Current.Session [" Benutzername "])' (Sorry ist in C# angegeben) behandelt es die Nullreferenz – Webruster

+0

@Webbruster es ist bereits konvertiert. Wenn Sie zurückgehen, um den Code zu lesen, den ich gab, werden Sie sehen, dass, wo die Ausnahme auftritt, endet das Ende der Anweisung mit ..... 'Session (" Benutzername "). ToString' – Ndumiso

+0

, wenn Sie .ToString verwenden () Dies führt zu einer NULL-Referenzausnahme, wenn das Objekt NULL ist, wo dies gehandhabt wird, wenn Sie mit 'Convert.Tostring' konvertieren, das ist, was ich in meinem vorherigen Kommentar verweise – Webruster

Antwort

0

Das Problem ist: wenn „Benutzername“ Schlüssel nicht existiert, der Wert, den Sie von Session erhalten, ist das Objekt Nichts, nicht vbNull. Dann löst Nothing ToString eine Ausnahme aus. Versuchen Sie folgendes:

If Session("Username") IsNot Nothing Then 
    LogInStatus.Text = "logged in user " & Session("Username").ToString 
Else 
    Response.Redirect("Login.aspx", False) 
End If 

Anstatt vbNull zuweisen Sie tun können Session.Remove („Username“), die den Wert auf Nothing setzt.

+0

DANKE. Das hat funktioniert – Ndumiso