04. august 2005 - 23:38Der er
9 kommentarer og 2 løsninger
Sikre at brugeren sættes til logget-ud i database.
Som det er nu, så bliver en person sat til 'loggetind' i databasen, så samme brugernavn ikke kan være logget ind med mere end en session. Men hvis personen ikke logger ud (hvorved personen sættes til loggetind = false i db), men blot lukker browseren, så står personen stadig som logget ind. Jeg har prøvet at gemme bruger-id som sessionvariable og så kører et log-ud script når sessionen løber ud, men det virker ikke. Kan man overhovedet gøre på denne måde? Hvis ja, er der så noget galt i koden?
Dette løser ikke nødvendigvis dit problem, men det gør koden lidt "tyndere":
Set con = Server.CreateObject("ADODB.Connection") strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("log/db.mdb") con.open strDSN con.Execute("UPDATE Medlemmer SET Loggetind = False WHERE id = " & Session("medlemid")) con.close
Prøv evt. at lægge denne rutine over i en separat asp-fil som du så kalder fra dit Session_OnEnd-event således:
Jeg har lige skrevet en artikkel om global.asa hvor jeg slutter af med et eksempel som logger brugeren af http://www.eksperten.dk/artikler/752 Prøv læse artikelen, den burde forklare hvad du kan og ikke kan Du kan fx sagtens logge folk ud når sessionen dør Du skal jo bare være klar over at hvis session.timeout er sat til 20 , ja så går der 20minutter før sessionen dør, og dvs der går 20minutter før brugeren står som offline
Af andre ting du kan læse i artiklen er at Session_OnEnd ikke med garanti kører! Derfor ville jeg , hvis jeg var dig, tillade at et bruger kan logge ind selvom man står som logget ind. Jeg mener, man må jo stole på at ikke andre kender brugerens kodeord
Endvidere er et problem med din løsning at du benytter Server.Mappath i din session_onend og det kan man ikke, du får en fejl, men da sessionen er død og man ikke kan udskrive til skærmen i session_onend, ja så ser du aldrig denne fejl, du konstaterer blot at din database ikke bliver opdateret :o)
iøvrigt har jeg endnu ikke set et "fornuftigt virkende" eksempel på hvordan man logger brugeren ud lige så snart vedkommende lukker browseren Du kan i IE evt benytte fange javascripts event onBeforeUnLoad Ulempen er så at den kun kan fanges i IE og at det kræver at brugeren har tilladt javascripts samt ikke spærrer popups :o)
Dim conn Set conn = Server.CreateObject("ADODB.Connection") conn.Open Application("db") conn.Execute("UPDATE Medlemmer SET Loggetind = False WHERE id = " & Session("medlemid")) conn.close
End Sub </SCRIPT>
Tak for hjælp med at 'slanke' min kode, softspot, læg et svar.
God artikel busschou, godt timet! Vidste ikke at man ikke kunne bruge Server.Mappath i Session_OnEnd.
I IE virker <body onBeforeUnLoad="<%session.Abandon()%>">, mens det ser ud til at Firefox kører onBeforeUnLoad med det samme siden loades, i.e. session.Abandon(), så snart man rammer en ny side...?
Kan man være sikker på at brugeren ved session.timeout logges ud, hvis Session_OnEnd ikke med garanti kører? Hvis man ikke kan køre en session.Abandon() på fx Firefox, så bliver brugeren ved med at stå som logget ind?
Hvordan kan denne her virke?? <body onBeforeUnLoad="<%session.Abandon()%>"> onBeforeUnLoad er jo javascript, kan man bare putte session.abandon ind der? Det ville jeg ikke tro man kunne, for det er jo server script og ikke klient
Desværre kan man ikke være sikker på at Session_OnEnd køres. Jeg har ikke set nogen statestik over hvor tit det sker at den ikke kører. Jeg har oplevet det nogle få gange. Man skal bare være klar over det, så man fx ikke låser en bruger fra at logge ind hvis han grundet dette altid står som logget ind.
nej det synes jeg ikke man skal Som jeg ser det har jeg kun et kodeord til min webmail, men hvis jeg logger ind herhjemme, og så går på job uden at logge af, hvorfor skulle jeg så ikke måtte logge ind igen, uanset om der er gået 5,10,20 eller flere minutter?
Ja, det ville også pisse mig af :) Dilemmaet her er, at kunderne opnår rabat, når de er logget ind og firmaet vil undgå misbrug. Løsningen er at logge køb med brugernavn, tidspunkter, IP og glemme login?!
(Og i min forrige kommentar mente jeg selvfølgelig ikke 'glemme login', men at i stedet 'ikke sætter brugeren til logget ind').
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.