Den perfekta inloggningen #3
Förord
Nu har du förhoppningsvis en databas på plats, likaså ett formulär som du kan använda för att användaren skall registrera sig korrekt. Nu är det dags att börja hantera informationen så vi kommer åt den senare, både som besökare och webbsida.Innehåll
»»
»
Relaterade artiklar
» Den perfekta inloggningen #1» Den perfekta inloggningen #2
Hantera registreringen
I föregående kapitel visade jag en form av felhantering som du kan och bör använda så du fångar upp eventuella fel så fort som möjligt. Ju tidigare du tar hand om slarviga försök till registreringar, desto mindre jobb behöver du senare ägna åt att försöka rensa konton som inte ser korrekta ut. Vad som är korrekt eller inte är ju väldigt svårt att avgöra så mitt tips till dig är följande. Är det en seriös hemsida med information som kan vara nyttig för besökaren så är chansen större att folk också registrerar sig seriöst.
Anslutning till databasen
Vår anslutning till en databas är nästan det största och mest återkommande arbete som sker på sajter som är dynamiskt byggda med såväl asp som andra scriptspråk. Varje gång en sida laddas så hanteras också troligen information som kontrolleras, hämtas eller skrivs till databasen. Jag brukar alltid lägga en connectionsträng i global.asa för att underlätta för mig. Det finns en stor mängd variation över hur olika utvecklare hanterar en connection såsom att lägga alla databasanrop i en komponent, lägga connectionsträngen i serverns registry eller helt enkelt använda en DSN adress som är uppsatt på servern.Vi klarar oss gott med en connectionsträng som skapas i global.asa, i detta fall då servern startas upp och för att utföra detta så har vi följande sats i vår global.asa fil.
Sub Application_OnLoad()
Application.Lock
Application(“dsn”) = "Provider=sqloledb;" & _
"Data Source=servernamn;" & _
"Initial Catalog=databasnamn;" & _
"User Id=anvaendarnamn;" & _
"Password=loesenord;"
Application.UnLock
End Sub
Någon närmare presentation är ingen ide att skriva om här då alla kommer troligen att ha olika connectionsträngar till sin databas, så detta är en DNS-lös connectionsträng till en SQL-server. Givetvis ser alla dessa connectionsträngar olika ut och för att enklast se vad som passar för just dig och din webbserver rekommenderas artikeln (Olika Connectionsträngar) som finns här på pellesoft.
Kontrollera anslutningen
Vi har inte gjort något annat än satt upp en connectionsträng som är kopplad till ett objekt som heter Application(”dsn”). Om vi nu på vilken sida som helst skriver ut denna informationen så kommer du se att connectionsträngen är fylld med den information som du ser ovan.Om du sedan använder den connectionsträngen på en asp-sida så kommer sedan connectionstängen att fyllas på ytterligare och det sker automatiskt vid anslutningen. Ett exempel kan vara detta:
Set Con = Server.CreateObject(”ADODB.Connection”)
Con.Open Application(“dns”)
Response.Write Con.ConnectionString
Vad som kommer att visas här om anslutningen till databasen var korrekt kan se ut som följer:
Provider=SQLOLEDB.1;Password=xxxx;User ID=yyyy;Initial Catalog=zzzz;Data Source=åååå;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=WEB2;Use Encryption for Data=False;Tag with column collation when possible=False
Så ovan kommer allting att skrivas ut I klartext, userid, password, databasnamn och servernamn. Detta är egentligen kvittot på att din anslutning gått bra. Detta var ett litet utflik, men kan vara bra att veta om man skulle få problem.
För att avsluta det hela korrekt så bör en felhantering finnas med vid varje anslutningsförsök och det kan du göra genom att först tillåta eventuella fel, därefter ansluta och slutligen kontrollera om några fel uppstod. Ett exempel på detta kan vara:
En korrekt anslutningssträng
‘ Tillåt alla fel att uppstå
On Error Resume Next
Set Con = Server.CreateObject(”ADODB.Connection”)
Con.Open Application(“dsn”)
‘ Fick vi något fel vid anslutningsförsöket?
If Err <> 0 Then
Response.Write “Anslutningen misslyckades”
Response.Write Err.Description
Response.End
End If
‘ Sluta ignorera felen
On Error Goto 0
’ programmet utför något
’ frigör connection igen och släpp tillbaks den till poolen
Con.Close
Set Con = Nothing
Nu har vi även gått igenom och förhoppningsvis testat din connectionsträng till databasen så ni kan vi faktiskt skriva den rutinen som du behöver för att spara ner användarens registrering till databasen.
Som du läste i del 2 av denna kurs så har vi med request-objektet hämtat ut de fält som användaren matat in. Vi har även kontrollerat att innehållet är korrekt och så länge som inte variabeln errtext innehåller något, så kan vi även använda den för att bestämma om vi skall skriva ner datat eller inte.
Spara registreringen till databasen
Vi börjar med att skapa en lagrad procedur som vi enkelt kan kalla på för att skriva ner informationen till databasen. Klipp ut denna kod och kör den direkt i din Query Analyzer så läggs den in i databasen.
Create Procedure AnvaendareIns
@foernamn varchar(50)
, @efternamn varchar(50)
, @epost varchar(60)
, @loesenord varchar(10)
, @nyhetsmail char(1)
, @autologin char(1)
As
Set NoCount On
Insert Into Anvaendare (
foernamn
, efternamn
, email
, loesenord
, nyhetsmail
, autologin
, rollid)
values(
@foernamn
, @efternamn
, @email
, @loesenord
, @nyhetsmail
, @autologin
, 0)
GO
Den sista inparametern är rollid som alltid default sätts till 0 = normal användare. Nu är det dags att titta på asp-koden för att addera användaren via den lagrade proceduren:
If Len(errText) = 0 Then
‘ Vi har ingen feltext med oss, då förbereder vi oss
’ Anslut till databasen
Set Con = Server.CreateObject(”ADODB.Connection”)
Con.Open Application(“dsn”)
insString = ”’” & foernamn & ”’, ” & _
”’” & efternamn & ”’, ” & _
”’” & epost & ”’, ” & _
”’” & loesenord & ”’, ” & _
”’” & nyhetsmail & ”’, ” & _
”’” & autologin & ”’”
’ Kör proceduren – addara användare
Con.Execute ”AnvaendareIns ” & insString
Con.Close
Set Con = Nothing
‘ Gå till en välkomstsida som inloggad
Response.Redirect “vaelkommen.asp”
End If
En sammanfattning av denna sektion visar hur du först sätter upp en connectionsträng via ett Application-objekt till din databas som du sedan på vilken asp-sida som helst kommer åt. Därefter visade jag en typisk felhantering som du kan använda och det är upp till dig att använda det på alla sidor eller inte. När anslutningen sedan kunde användas så skapade vi en lagrad procedur som du adderar till din databas och använder i ditt asp-program.
Användaren är nu inlagd i din databas och det är dags att ta sig ifrån registreringssidan för att hälsa användaren välkommen. Detta gör du i samma veva som du frigör connectionobjektet. Men innan jag visar den koden, bör du även nu sätta dit en cookie på användarens dator för att veta vad som gäller nästa gång användaren kommer in.
Automatisk inloggning eller ej?
Den automatiska inloggningen sker genom att du fått reda på om användaren vill logga in automatiskt eller inte via objektet autologin. Om det är ’J’ så gör vi enklast i att skriva ner lösenordet som en cookie.
Con.Close
Set Con = Nothing
If autologin = “J” Then
Response.Cookies(“password”) = password
Response.Cookies(“password”).Expires = DateAdd(“d”, 365, Now())
End If
Response.Redirect “vaelkommen.asp”
Om användaren ville logga in så skriver vi helt enkelt ner lösenordet som en cookie på användarens pc. När sedan användaren kommer till hemsidan så läsas denna cookie av och användaren loggas in automatiskt, fiffigt va. Dock kan detta tyckas vara ett riktigt osäkert sätt men användaren är skyddad så länge han ser till att ingen använder hans dator och det är inte så troligt.
Att kryptera lösenordet vore ingen idé för användaren som skulle vilja komma åt det vet garanterat vad han sysslar med och om han kommer åt dennes dator, går till sajten och ändrar lösenord, ja, då är inte detta rätt teknik.
Du kommer ha bra säkerhet i alla fall och är informationen så viktig skall användaren inte välja att utföra denna automatiska inloggning. Det kan sägas mycket om hur det skall gå till så det är upp till utvecklaren att bestämma graden av säkerhet, dynamik och smidighet. Den bollen över säkerhetsgrad överlåter jag till er att fundera på då med tanke på hur vital informationen är.
Mer om hur vi nu arbetar vidare kommer jag ta upp i kapitel 4.
0 Kommentarer