09. august 2006 - 14:25Der er
25 kommentarer og 1 løsning
session baseret login sytem skal cookie baseres
Hej Har lavet et loginsystem der opretter en session, hvis en bruger logger ind. Problemet er at det virker ad H til. Det er meningen at, når en bruger er logget ind, så skal sessionen vare en time, men fakta er, at man bliver logget ud i tide og utide. Nogle gange rigtignok efter en time, men andre gange efter blot et par minutter.
Derfor vil jeg gerne have en cookie til at styre det, da jeg har ladet mig fortælle, at disse er mere stabile.
Jeg har ikke arbejdet med cookies før, så jeg mangler hjælp til at få lavet sytemet om, således at der lagres en cookie på brugerens PC. Denne skal så leve i en time, eller indtil brugeren klikker på en "Log ud" knap.
Her er nogle forskellige kodestykker:
Login/logud formular, der befinder sig på alle sider:
<% If Not Session.contents("login") = true Then %> <form name="login" method="post" action="../lokalinfo/login_tjek.asp"> <table width="134" height="150" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="7"><br>
RSbruger_numRows = 0 %> <table width="134" height="150" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="7"> <label></label></td> <td valign="top"><strong><br> Hej <%=(RSbruger.Fields.Item("fornavn").Value)%></strong>.<br> <br> Du kan nu bruge <br> Styringsmenuen forneden.<br> <br> Husk at logge ud når du forlader din pc. <br> <br> <a href="../lokalinfo/logout.asp">[Log ud]</a></td> </tr> </table> <%end if%>
------------------------------- login_tjek.asp: Side der tjekker login formularen ------------------------------- <% Set Conn = Server.CreateObject("ADODB.Connection") Set MyRS = Server.CreateObject("ADODB.RecordSet")
MyConnection = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/db/database.mdb") Conn.Open MyConnection MySQL = "Select * from Brugere where brugernavn='" & request.form("Brugernavn") & "'"
' response.write(MySQL) set MyRS = Conn.Execute(MySQL)
if MyRS.EOF then Response.Redirect (Request.ServerVariables("HTTP_REFERER"))
elseif request.form("password")=MyRS("password") then Session("login")=True Session("brugernavn")= MyRS("brugernavn") Session("rang")= MyRS("rang")
else Response.Redirect (Request.ServerVariables("HTTP_REFERER")) end if %>
---------------------------- Denne kode ligger på alle sider, og skal sørge for at man fortsat er logget ind. ----------------------------
<%Session.Timeout=60%>
---------------------------- Denne kode findes på alle "lukkede" sider: ----------------------------
If Not Session.contents("login") = true Then response.Redirect("../denied.asp") else if Session.contents("rang") <> "admin" AND Session.contents("rang") <>"superbruger" AND Session.contents("rang") <>"bruger" Then response.Redirect("../denied.asp") end if end if
er der nogen der kan hjælpe mig med at få løst dette problem???
Flere kommuner går nu i gang med at bruge AI-understøttet dokumentation. Målet er, at sagsbehandlere skal bruge mindre tid på referater og registrering – og mere tid på nærvær i mødet med borgeren.
der er fordele og ulemper ved begge dele - men at cookies skulle være mere stabile end sessions har jeg nu aldrig hørt. Kun i de tilfælde hvor webserveren har nogle problemer, og det ser ud som det er det du er ude for, vil cookies virke mere stabile.
I bund og grund ville jeg mene det var utrolig synd hvis du skiftede til cookies - så var en mulighed måske at finde et mere stabilt sted (for som sagt lyder det som om det er det der er problemet). Men hvis du endelig vil skifte er der i bund og grund ikke den store forskel - du kan læse lidt om det på nednstående links.
okay, tak for artiklerne, dem vil jeg lige studere lidt nærmere. Jeg har mit websted hos web10, og det var dem der anbefalede mig at bruge cookies, da jeg lagde et indlæg om problemet i deres forum.
Men hvorfor er det synd at skifte? Og ville jeg opleve de samme problemer med cookies, hvis det er webstedet der er problemet?
nej - du vil ikke opleve samme problemer med cookies, for der tjeckes brugeren ud fra en fil hos client hvorimod sessions er afhængige af at webserveren er i live. Dvs - genstartes services på serveren vil en bruger med sessions blive tabt hvorimod en bruger med cookie vil leve videre.
Grunden til at det er synd er meget kort sagt at det er lettere at blokere for cookies end session, at sikkerheden omkring sessions er større og at du lettere oplever problemer med cookies der ikke helt vil som du vil.
web10 er - med al respekt - nok heller ikke blandt de hurtigste knive i glashuset... eller deromkring :)
hehe! Det kan du ho have ret i. Man får jo hvad man betaler for... Jeg vil ikke spørge om et bedre alternativ til web10 i dette spm, for så kommer det starter altid en heftig debat, men hvis det bliver tilfældet, så opretter jeg et nyt spm. til det...
Med de grunde du giver, kan jeg jo godt se, at det er bedst at holde mig til sessions.
Jeg vil se, hvad beslutningstagerne siger til at skifte webhotel.
Men indtil da, er jeg stadig åben for hjælp til at skifte mine koder fra sessions til cookies.
Hmm. der er desværre ikke penge til at skifte til de dyrere og mere stabile webhoteller, så derfor bliver jeg i første omgang nødt til at skrue kvaliteten på hjemmesiden lidt ned og cookie basere den.
Kan du hjælpe keysersoze? Jeg vil egentlig bare gerne se, hvordan mine session scripts bliver lavet om til cookie scripts.
Du må ikke bare lave en search og replace. Hvis du ikke vil benytte sessions, skal hele designet laves om.
En bruger kan selv ændre indholdet i sine cookies. Så en search/replace på ovenstående vil betyde, at en bruger kan logge sig ind som en anden bruger, give sig selv administrative rettigheder etc
der er allerede skrevet at sikkerheden er betydelig lavere ved cookies så medmindre der er sprunget let og elefant hen over den kommentar bør man allerede være opmærksom på dette.
Et alternativ er selvfølgelig at begynde at lege med kryptering af indholdet i cookien - men mon ikke hele cookie-systemet skal virke før man begynder at tage fat på den del.
Der skal nok gemmes en beregnet værdi ud fra brugerens data + noget random data + en nøgle kun kendt af serveren.
Ved hvert kald beregnes værdien igen, og kontrolleres med den værdi som ligger i cookien. Kun hvis de to værdier er ens, er dataene korrekt. Noget i denne stil
Response.Cookies("username") = "ksoren" Response.Cookies("rnd") = random generet værdi på x antal karakterer Response.Cookies("control") = MD5(username & rnd & nøgle)
MD5(username & rnd & nøgle) udføres ved alle kald, og sammenlignes med control cookien. Brugeren kan ikke selv beregne control værdien, da han ikke har kendskab til den hemmelige nøgle
Så for dælen. Nu kommer jeg nok ud på dybt vand. Men det ser ud til at I har fat det rigtige til mig.
Jeg prøver lige at lave en login funktion, der er baseret på cookies, ud fra de artikler du gav mig keysersoze. Hvis jeg altså kan finde ud af det. (ellers skal jeg nok sige til:)
Når jeg har det, får jeg brug for hjælp til at kryptere det.
else Response.Redirect (Request.ServerVariables("HTTP_REFERER")) end if %>
--------------hemmelig.asp-------------- 'dette ligger øverst på alle interne sider <% If Not request.cookies("test")("login") = "true" Then response.redirect("denied.asp") end if %>
-------------logout.asp----------------- <% ' slet værdierne i alle cookies response.cookies("test")("login") = "false" response.cookies("test")("brugernavn") = "" response.cookies("test")("rang") = "" ' og videresend brugeren Response.Redirect (Request.ServerVariables("HTTP_REFERER")) %>
Lige nu har jeg <%response.buffer = true%> øverst på alle sider, hvad gør det egentlig godt for?
Ser mine koder fornuftige ud? Det virker i hvertfald. Nu mangler jeg vist lidt hjælp til krypteringen...
godt nok er md5 ikke direkte kryptering men hash - det vil dog kunne gøre det sværere for de fleste at snyde med systemet; http://www.asp-faq.dk/article/?id=52
hash småkager, hmmm.... Jeg er lidt forvirret. I den artikel står der at passwords skal gemmes som hashed værdier i databasen. er det det jeg skal gøre også? eller skal jeg hashe selve cookien?
Kan godt, ved oprettelse af ny bruger få den til at gemme passwordet som en hashed værdi. Problemet er så bare, at når jeg vil logge på, så skal det være med hash værdien som adgangskode :)
som allerede foreslået burde det være nok at hashe ud til cookien - der er intet forkert i at gøre det til databasen, men det andet er nok det letteste.
Hvordan du skal gøre synes jeg er rimeligt forklaret i den artikel jeg linkede til?
If Not request.cookies(md5("test"))("login") = "true" Then response.redirect("denied.asp") end if
Har jeg ret?
Men hvad er det egentlig lige md5 gør? Mit bud er at, når en hashed cookie ligger på computeren, så skal man lede sig frem til den pågældende cookie, hvis man har ønsker at misbruge siden, har jeg ret i det?
Mine testsider virker, kunne bare godt lige tænke mig at vide, hvad det egentlig er jeg laver :)
Jeg lader det være som det er, så kan jeg altid rette i det, hvis der skulle opstå problemer. Mange tak for hjælpen. så fik jeg endelig lært at arbejde med cookies, også!
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.