15. februar 2004 - 21:42Der er
33 kommentarer og 1 løsning
Hjælp til autologin ASP
Hejsa NG.
Jeg har prøvet at få hjælp til noget autologin der ikke virkede. Men dette hjalp ikke.
Derfor spørger jeg om der er en venlig sjæl der vil lave et nyt autologin system til mig. En lille checkbox som brugeren skal krydse af inden han/hun trykker login.
Først kommer siden hvor loginformen er:
<En masse HTML-kode> <% If Session("login") = False THEN %> <form method="post" name="adminlogin" action="opret.asp?mode=check"> <span class="tekstboks">Brugernavn:</span><br> <input class="forms" size="20" name="username" value="<%=Username%>"><br> <span class="tekstboks">Password:</span><br> <input class="forms" size="20" type="password" name="password" value="<%=Password%>"><br><input class="formsknap" type="submit" value="Login" name="Action"><br><br><br> <a href="login.asp" title="Opret ny bruger">Opret bruger</a><br> <a href="opret.asp" title="Få tilsendt dit password">Glemt password</a><br> </form> <% Else Response.write("<span class=tekstboks>" & session("user") & ", du har nu følgende muligheder:</span><br><br>") Response.write("<a href=profile.asp?mode=own_profile>Ret profil</a><br><a href=>Se dine film</a><br><a href=>Tilføj film</a><br><a href=>Slet film</a><br><a href=>Se andres film</a>") Response.write("<form method=post action=logout.asp><input type=submit class=formsknap value=Logout></form>") End If %>
Så kommer filen der behandler login'et:
<% If Request.ServerVariables("REQUEST_METHOD") = "POST" THEN ' Logon Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open Application("Provider") Sql = "SELECT user, id, lastlogon, email FROM users WHERE user = '"& CleanText(Request.Form("username")) &"' AND password = '"& CleanText(Request.Form("password")) &"'" Set Rs = Server.CreateObject("ADODB.RecordSet") Rs.Open Sql, Conn, 1,1 If Rs.RecordCount = 1 THEN Session("login") = True Session("user") = Rs("User") Session("id") = Rs("id") Session("lastlogon") = Rs("lastlogon") session("email") = Rs("email") Sql = "UPDATE users SET lastlogon = #"& Date() &"# WHERE id = " & Rs("id") Conn.Execute(Sql) Rs.Close Response.redirect(Request.ServerVariables("HTTP_REFERER")) End If Set Rs = Nothing Conn.Close Set Conn = Nothing End If %>
Jeg har lavet en kolonne i tabellen 'users' der hedder 'autolog' hvor den er sat til Ja/Nej.
>>Jeg har lavet en kolonne i tabellen 'users' der hedder 'autolog' hvor den er sat til Ja/Nej. For autologin virker skal det gemmen i en cookie, da man jo ikke kender hvilken bruger der vil logge ind.
Nej jeg søger ikke et nyt loginsystem. Men netop som du skrive en cookie system, så brugeren kan vælge at blive husket. Gerne flettet ind i det nuværende.
Umiddelbart skal diss linjer rettes: If Session("login") = False THEN %> <form method="post" name="adminlogin" action="opret.asp?mode=check"> <span class="tekstboks">Brugernavn:</span><br> <input class="forms" size="20" name="username" value="<%=Username%>"><br> <span class="tekstboks">Password:</span><br> <input class="forms" size="20" type="password" name="password" value="<%=Password%>"><br><input class="formsknap" type="submit" value="Login" name="Action"><br><br><br> <a href="login.asp" title="Opret ny bruger">Opret bruger</a><br> <a href="opret.asp" title="Få tilsendt dit password">Glemt password</a><br> </form> <%
Til dette sådan den hendter fra cookien og den også har en checkbox:
If Session("login") = False THEN huskmig = Request.Cookies("login")("huskmig") if huskmig = "yes" then Username = Request.Cookies("login")("brugernavn") Password = Request.Cookies("login")("password") end if %> <form method="post" name="adminlogin" action="opret.asp?mode=check"> <span class="tekstboks">Brugernavn:</span><br> <input class="forms" size="20" name="username" value="<%=Username%>"><br> <span class="tekstboks">Password:</span><br> <input class="forms" size="20" type="password" name="password" value="<%=Password%>"><br> <span class="tekstboks">Husk mig:</span><br> <input class="forms" type="checkbox" name="huskmig" <% if huskmig = "yes" then Response.Write " CHECKED "%> > <input class="formsknap" type="submit" value="Login" name="Action"><br><br><br> <a href="login.asp" title="Opret ny bruger">Opret bruger</a><br> <a href="opret.asp" title="Få tilsendt dit password">Glemt password</a><br> </form> <%
------- Koden til filen der behandler login'et skal rettes til dette:
<% If Request.ServerVariables("REQUEST_METHOD") = "POST" THEN fhuskmig = Request.Form("huskmig") if fhuskmig <> "" then Response.Cookies("login")("huskmig") = "yes" else Response.Cookies("login")("huskmig") = "no" end if Response.Cookies("login").Expires = date() + 365 ' Logon Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open Application("Provider")
Sql = "SELECT user, id, lastlogon, email FROM users WHERE user = '"& CleanText(Request.Form("username")) &"' AND password = '"& CleanText(Request.Form("password")) &"'" Set Rs = Server.CreateObject("ADODB.RecordSet") Rs.Open Sql, Conn, 1,1 If Rs.RecordCount = 1 THEN if fhuskmig <> "" then Response.Cookies("login")("brugernavn") = username Response.Cookies("login")("password") = password Response.Cookies("login").Expires = date() + 365 end if Session("login") = True Session("user") = Rs("User") Session("id") = Rs("id") Session("lastlogon") = Rs("lastlogon") session("email") = Rs("email") Sql = "UPDATE users SET lastlogon = #"& Date() &"# WHERE id = " & Rs("id") Conn.Execute(Sql) Rs.Close Response.redirect(Request.ServerVariables("HTTP_REFERER")) End If Set Rs = Nothing Conn.Close Set Conn = Nothing End If %>
Nej der skal ikke være noget i db'en. Lige nu er den faktisk også kun "husk mig" funktion. Så prøv tilføje noget kode imellem diss to:
</form> <% Else Response.write("<span class=tekstboks>" & session("user") & ", du har nu følgende
sådan her:
</form> <% if huskmig="yes" then %> <script> document.adminlogin.submit(); </script> <% end if Else Response.write("<span class=tekstboks>" & session("user") & ", du har nu følgende
Jeg døjer meget med serveren ligenu. Men umiddelbart kan jeg nu se at den sender én videre til opret.asp. Som er den side der behandler login'et og opretter en på ny.
<% if huskmig="yes" then %> <script> document.adminlogin.submit(); </script>
forbliver den på den side hvorpå man logger ind. Opret.asp behandler kun login't, og det er menigen at hvis brugeren ikke eksistere så viser den selve siden opret.asp, hvor brugeren så kan oprette sig. Men den side skal den ikke vise når login er ok.
Egentlig kunne jeg ligeså godt have det der behandler login data i opret.asp, som include i toppen. Så det er der når som helst. Resten af opret.asp er som det jo antyder, en oprettelse funktion til brugerne.
Hvis man selv logget ind, logger den fint ind. Lukker man browseren og åbner en ny, og går ind på siden går det galt. Hvis man logger af og på manuelt virker det helt fint.
Hvis formen ikke er udfyldt får den ikke hentet data fra cookien korrekt, men hvis checkboxen er med kryds i må det være hvor cookien gemmes det går galt. Ja har du en side?
Men så lige noget, inde i den fil som gemmer brugernavn og password i cookien ret lige diss linjer:
if fhuskmig <> "" then Response.Cookies("login")("brugernavn") = username Response.Cookies("login")("password") = password Response.Cookies("login").Expires = date() + 365 end if
Til:
if fhuskmig <> "" then Response.Cookies("login")("brugernavn") = Request.Form("username") Response.Cookies("login")("password") = Request.Form("password") Response.Cookies("login").Expires = date() + 365 end if
Så skal du lave to en Autologin og en Huskmig, og hvis man logger ud skal man fjerne autologin. Så kan man styre det på den måde. For hvis man fjerne huskmig vil den så ikke vise brugernavn og password.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.