tisdag 26 januari 2010

Login(2)

Med den nuvarande versionen av Login.aspx går det att logga in i systemet nu, men systemet vet inte vem besökaren är. Ganska meningslöst med andra ord. Men det går att ändra på.

Men alla besökare får automatisk en identitet, en cookie, som systemet kan läsa. En cookie består av en text och några andra uppgifter. Texten kan se ut så här: mjtnde550hugrt2au4ycuk25.

Det första programmet bör göra, dvs i Page_Load, är att läsa cookien och sedan söka i databasen om det finns någon användare med denna cookie. Cookien finns i objektet HttpCookie som måste deklareras med satsen Dim cookie As HttpCookie. Denna deklaration görs lämpligen utanför Page_Load så att objektets innehåll är tillgängligt båda i Page_Load och proceduren Login1_Click som hanterar klick på loginformuläret.

I databasen finns cookien i fältet kaka som lagrar en sträng om 50 tecken. Databasen ska returnera användarens interna id och användarnamnet så SQL-satsen blir
SELECT id, kaka, username FROM [User] WHERE kaka='" & cookie.Value & "'".

Förbindelsen med databasen skapas med
Dim conn As SqlConnection
Dim connectionstring As String = ConfigurationManager.ConnectionStrings("System91").ConnectionString
conn = New SqlConnection(connectionstring)
Dim comm As SqlCommand
comm = New SqlCommand(sql, conn)

Själva läsningen görs inom Try... Catch. Eftersom flera uppgifter hämtas från databasen sker det med ExecuteReader().

Den centrala koden som utförs innan loginformuläret visas är följande

Dim cookie As HttpCookie
Dim Username As String = ""
Dim sql As String
Dim cookie As HttpCookie

If Not IsPostBack Then
cookie = Request.Cookies.Get("System9")
If cookie Is Nothing Then
Master.DisplayDataFromPage("")
else
sql = "SELECT id, kaka, username FROM [User] WHERE kaka='" & cookie.Value & "'"
Dim conn As SqlConnection
Dim connectionstring As String = ConfigurationManager.ConnectionStrings("System91").ConnectionString
conn = New SqlConnection(connectionstring)
Dim comm As SqlCommand
comm = New SqlCommand(sql, conn)
Try
conn.Open()
Dim reader As SqlDataReader = comm.ExecuteReader()
If reader.Read() Then
Userid = reader.Item("id")
Username = reader.Item("Username")
Master.DisplayDataFromPage(Username)
Else
Master.DisplayDataFromPage("Inte inloggad")
End If
Catch ex As SqlException
Message.Text += " Databasfel. " & ex.Number & ": " & ex.Message
Finally
conn.Close()
End Try
End If
End If

IsPostBack-variabeln informerar om användaren beställer samma sida igen. Här innebär kontrollen att Page_Load inte utförs igen när användaren klicka på loginformulärets knapp.
Med Master.DisplayDataFromPage uppdateras fält i MasterPage.DisplayDataFromPage är en procedure i MasterPage.vb som innehåller de satser som behövs för att uppdatera dessa fält. I detta fall ser proceduren ut så här:
Public Sub DisplayDataFromPage(ByVal message As String)
HeadUserName.Text = message
End Sub

Så har programmet utvecklats lite till. I nästa avsnitt tillkommer koden som tar hand om själva inloggningen och uppdaterar databasen med cookien.


Inga kommentarer:

Skicka en kommentar