18. april 2003 - 14:54
#3
Den spørger om domæne, da IE kan se at det er en IIS'server.
Du lægger der ind i den side der skal kontrollere om brugeren er logget ind.
Hvis du vil sammenligne brugernavn/password med en database, skal du bruge lidt mere kode, så du kan afkode password.
Test-script:
<%@ Language=vbscript %><%
Function Base64Decode(base64String)
Const Base64CodeBase = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim dataLength, Out, groupBegin
dataLength = Len(base64String)
Out = ""
If dataLength Mod 4 <> 0 Then
Err.Raise 1, "Base64Decode", "Bad Base64 string."
Exit Function
End If
' Now decode each group:
For groupBegin = 1 To dataLength Step 4
Dim numDataBytes, CharCounter, thisChar, thisData, groupData
' Each data group encodes up To 3 actual bytes.
numDataBytes = 3
groupData = 0
For CharCounter = 0 To 3
' <B>Convert</B> each character into 6 bits of data, And add it To
' an integer For temporary storage. If a character is a '=', there
' is one fewer data byte. (There can only be a maximum of 2 '=' In
' the whole string.)
thisChar = Mid(base64String, groupBegin + CharCounter, 1)
If thisChar = "=" Then
numDataBytes = numDataBytes - 1
thisData = 0
Else
thisData = InStr(Base64CodeBase, thisChar) - 1
End If
If thisData=-1 Then
Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
Exit Function
End If
groupData = 64 * groupData + thisData
Next
' Convert 3-byte integer into up To 3 characters
Dim OneChar
For CharCounter = 1 To numDataBytes
Select Case CharCounter
Case 1: OneChar = groupData \ 65536
Case 2: OneChar = (groupData And 65535) \ 256
Case 3: OneChar = (groupData And 255)
End Select
Out = Out & Chr(OneChar)
Next
Next
Base64Decode = Out
End Function
if Request.ServerVariables("HTTP_AUTHORIZATION") = "" then
Response.Status = "401 Unauthorized"
Response.Addheader "WWW-Authenticate", "BASIC Realm = Hov hov"
Response.End
else
Auth=Request.ServerVariables("HTTP_AUTHORIZATION")
if left(Auth,6)="Basic " then
userPass=split(Base64Decode(mid(Auth,7)),":")
Response.Write "<br>Brugernavn:" & userPass(0)
Response.Write "<br>Password:" & userPass(1)
end if
end if
%>
userPass(0) og userPass(1) kunne du, efter kontrol i database eller lign, gemme i en session variabel.
Et script som kontrollerer om brugeren er logget ind, og ellers forsøger at logge ind, kunne være:
<%@ Language=vbscript %><%
Function Base64Decode(base64String)
Const Base64CodeBase = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim dataLength, Out, groupBegin
dataLength = Len(base64String)
Out = ""
If dataLength Mod 4 <> 0 Then
Err.Raise 1, "Base64Decode", "Bad Base64 string."
Exit Function
End If
' Now decode each group:
For groupBegin = 1 To dataLength Step 4
Dim numDataBytes, CharCounter, thisChar, thisData, groupData
' Each data group encodes up To 3 actual bytes.
numDataBytes = 3
groupData = 0
For CharCounter = 0 To 3
' <B>Convert</B> each character into 6 bits of data, And add it To
' an integer For temporary storage. If a character is a '=', there
' is one fewer data byte. (There can only be a maximum of 2 '=' In
' the whole string.)
thisChar = Mid(base64String, groupBegin + CharCounter, 1)
If thisChar = "=" Then
numDataBytes = numDataBytes - 1
thisData = 0
Else
thisData = InStr(Base64CodeBase, thisChar) - 1
End If
If thisData=-1 Then
Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
Exit Function
End If
groupData = 64 * groupData + thisData
Next
' Convert 3-byte integer into up To 3 characters
Dim OneChar
For CharCounter = 1 To numDataBytes
Select Case CharCounter
Case 1: OneChar = groupData \ 65536
Case 2: OneChar = (groupData And 65535) \ 256
Case 3: OneChar = (groupData And 255)
End Select
Out = Out & Chr(OneChar)
Next
Next
Base64Decode = Out
End Function
if Session("Bruger")="" then
if Request.ServerVariables("HTTP_AUTHORIZATION") = "" then
Response.Status = "401 Unauthorized"
Response.Addheader "WWW-Authenticate", "BASIC Realm = Min side"
Response.End
else
Auth=Request.ServerVariables("HTTP_AUTHORIZATION")
if left(Auth,6)="Basic " then
userPass=split(Base64Decode(mid(Auth,7)),":")
if userPass(0)="admin" and userPass(1)="adminpass" then
Session("Bruger")="admin"
else
Response.Status = "401 Unauthorized"
Response.Addheader "WWW-Authenticate", "BASIC Realm = Hov hov"
Response.End
end if
end if
end if
end if
Response.Write "Velkommen " & Session("Bruger")
' Kommer vi hertil, er vi logget ind.
%>
if userPass(0)="admin" and userPass(1)="adminpass" then
skal selvfølgelig skiftes med et eller ander der kontrollerer i databasen.
Alle andre sider kan så nøjes med at kigge på Session("Bruger"), og hvis den er tom, kaste brugeren over til ovenstående script.
(håber ikke jeg har lavet for mange fejl ;-)