26. januar 2004 - 16:27Der er
19 kommentarer og 1 løsning
Session ud fra en Cookie
Hejsa
Jeg har følgende script som laver en session og en cookie.
<%
J_User = FixaTecken(Request.Form("username")) J_Pass = FixaTecken(Request.Form("password")) url = Request.Form("Url") SQLStmt = "SELECT * FROM Members Where M_Approve = 1 and M_Name ='" & J_User & "' AND M_Password = '" & J_Pass & "'" Set RS = Conn.Execute(SQLStmt) If RS.EOF Then Response.Redirect ("default.asp") Else session("Userid") = rs("M_ID") session("M_name") = rs("M_name") session("M_email") = rs("M_email") Session("inlog") = True Response.Cookies(StrTitle).Expires = Date + 365 Response.Cookies(StrTitle)("J_User") = J_User Response.Redirect url END IF
%>
Er det muligt at lave et script som når den finder denne cookie at den så lave en session som hedder "inlog". Dette er mest tænkt som en slag autologin. Kan dette laves, eller er der en smartere måde at gøre det på ?
Ja det man men du skla nok gemme noget mere info end kun brugernavn eller kan man let logge ind som en anden bruger. Gem også password i cookien. Eller lav et Random password til hver bruger og gem det i cookien.
Så det nemt at lave:
username = Request.Cookies(StrTitle)("J_User") password = Request.Cookies(StrTitle)("J_Pass") if username <> "" AND password <> "" AND Session("inlog")<>"" then 'Tjek og lav autologin SQLStmt = "SELECT * FROM Members Where M_Approve = 1 and M_Name ='" & username & "' AND M_Password = '" & password & "'" Set RS = Conn.Execute(SQLStmt) If not RS.EOF Then session("Userid") = rs("M_ID") session("M_name") = rs("M_name") session("M_email") = rs("M_email") Session("inlog") = True END IF end if
Det som jeg gerne vil lave er auto login lige som til andre forummer, men jeg troede at jeg kunne lave det ved at lave den cookie som login siden laver om til en session og så på den måde lave en art auto login. MEn hvis kan få dig til at kigge koden igennem på forummet og lave en gang rigtigt auto login så sætter jeg gerne mange point til.
Jeg kan vise hvad jeg har gjort en gang. Jeg har lavet en fil som hedder autologin.asp og på de sider jeg vil give mulighed for automatisk login includer jeg filen i toppen:
<!--#include file="autologin.asp"-->
Koden til filen:
<% 'Tjek om autologin cookie er gemt samt tjek man ikke alderede er logget ind if Request.Cookies("login")("autologin") = "yes" and session("loginOK") <> "jada" then
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Data Source="& server.mappath("db5.mdb") & ";Provider=Microsoft.Jet.OLEDB.4.0;" Set rs = Server.CreateObject("ADODB.RecordSet")
'Hendt brugernan og password username = replace(Request.Cookies("login")("brugernavn"),"'","''") password = replace(Request.Cookies("login")("password"),"'","''")
strSQL= "SELECT * FROM dp_members WHERE account_valid = 1 AND (username = '" & username & "' AND userpassword='" & password & "');" Set rs = Conn.Execute (strSQL) 'Tjek bruger og password findes i databasen if NOT rs.EOF then 'Jeps der var en bruger sæt session variablerne som man er logget ind session("loginOK") = "jada" session("loginUserType") = rs("userType") session("loginMemberID") = rs("memberID") session("username") = rs("username") else 'Ingen bruger, sæt session variablerne = "" session("loginOK") = "" session("loginUserType") = "" session("loginMemberID") = "" session("username") = "" end if
Rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing end if %>
Det syntes jeg ikke rigtigt jeg kan sætte mig ind i, har nu bikset med op flere login script i snart en måned og intet har jeg kunne få til at virke som jeg gerne ville så jeg må tilstå at jeg er ved at give op. Så hvis jeg kunne få dig at komme det lidt nærmere ville jeg blive meget glad. Kender du det med at gå i totalt sort !!!!
Dette skulle den også gøre i starten af den fil hvor jeg har included autologin.asp filen. Der er en fil der hedder settings.asp som henter det fra databasen. Denne er included før autologin.asp. Ellers prøv at hente forummet fra ovenstående.
<% if Response.Cookies(StrTitle)("J_User") <> "" and Session("inlog") = "" then
SQLStmt = "SELECT * FROM Members Where M_Approve = 1 and M_Name ='" & J_User & "'" Set RS = Conn.Execute(SQLStmt) If RS.EOF Then ''Ingen bruger: Else session("Userid") = rs("M_ID") session("M_name") = rs("M_name") session("M_email") = rs("M_email") Session("inlog") = True END IF end if %>
arh, jeg kan da se en fejl i koden prøv lige denne:
<% if request.Cookies(StrTitle)("J_User") <> "" and Session("inlog") <> True then J_User = request.Cookies(StrTitle)("J_User") SQLStmt = "SELECT * FROM Members Where M_Approve = 1 and M_Name ='" & J_User & "'" Set RS = Conn.Execute(SQLStmt) If RS.EOF Then ''Ingen bruger: Else session("Userid") = rs("M_ID") session("M_name") = rs("M_name") session("M_email") = rs("M_email") Session("inlog") = True END IF end if %>
Det ser ud til at virke. Hvis man nu skal tage password med i autologin.asp er det så rigtigt at autologin.asp skal se sådan ud :
<% if request.Cookies(StrTitle)("J_User") <> "" and Session("inlog") <> True then J_User = request.Cookies(StrTitle)("J_User") J_Pass = request.Cookies(StrTitle)("J_Pass")
SQLStmt = "SELECT * FROM Members Where M_Approve = 1 and M_Name ='" & J_User & "'" Set RS = Conn.Execute(SQLStmt) If RS.EOF Then ''Ingen bruger: Else session("Userid") = rs("M_ID") session("M_name") = rs("M_name") session("M_email") = rs("M_email") Session("inlog") = True END IF end if %>
Og filen som laver cookien skal se sådan ud :
<%
J_User = FixaTecken(Request.Form("username")) J_Pass = FixaTecken(Request.Form("password")) url = Request.Form("Url") SQLStmt = "SELECT * FROM Members Where M_Approve = 1 and M_Name ='" & J_User & "' AND M_Password = '" & J_Pass & "'" Set RS = Conn.Execute(SQLStmt) If RS.EOF Then Response.Redirect ("default.asp") Else session("Userid") = rs("M_ID") session("M_name") = rs("M_name") session("M_email") = rs("M_email") Session("inlog") = True Response.Cookies(StrTitle).Expires = Date + 365 Response.Cookies(StrTitle)("J_User") = J_User Response.Redirect url END IF
Autologin delen kommen til at se sådan her ud, du skulle lige havde J_Pass med i SQL sætningen også :)
<% if request.Cookies(StrTitle)("J_User") <> "" and Session("inlog") <> True then J_User = request.Cookies(StrTitle)("J_User") J_Pass = request.Cookies(StrTitle)("J_Pass")
SQLStmt = "SELECT * FROM Members Where M_Approve = 1 and M_Name ='" & J_User & "' AND M_Password = '" & J_Pass & "'" Set RS = Conn.Execute(SQLStmt) If RS.EOF Then ''Ingen bruger: Else session("Userid") = rs("M_ID") session("M_name") = rs("M_name") session("M_email") = rs("M_email") Session("inlog") = True END IF end if %>
Samt login delen skal så også gemme passwordet i cookien så disse to linjer: Response.Cookies(StrTitle).Expires = Date + 365 Response.Cookies(StrTitle)("J_User") = J_User
Bliver til disse 3 linjer: Response.Cookies(StrTitle).Expires = Date + 365 Response.Cookies(StrTitle)("J_User") = J_User Response.Cookies(StrTitle)("J_Pass") = J_Pass
Yepper mand, alt virker nu som det skal, du har lige gjordt mig til en meget meget meget glad mand. Det var rigtigt dejligt. Du får alle point uden at blinke.
Det kan du tro. Takker for super prof. og hurtig support.
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.