18. marts 2008 - 11:42Der er
22 kommentarer og 1 løsning
logud uden om databasen
Hey derude... jeg har et lille login system som også tæller hvem der er online.. det virkert alt sammen meget godt...
...hvis altså lige at folk husker at logge sig ud inden de lukker browseren eller besøger en ny side i samme vindue..
Jeg har nemlig lavet min online-status sådan at den sættes til true når en person logger ind via login.asp og til false igen når en person logger ud via logout.asp
tror lidt at hvis jeg nu brugte sessions i stedet kunne dette løse mit problem da man kan sætte en timeout for sessions (ikke?) eller at session'en lukkes/brydes hvis siden forlades (eller?)
jeg kan bare ikke lige se hvordan jeg så skal skrive disse sessions når en bruger skal se om andre brugere er online..
Alt den kode bibeholder du bare. Det eneste du skal gøre er at smide dit logud script i global.asa
SUB Session_OnEnd Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DBString" conn.execute("update brugerTabel set online=false where id="& session("ID")) conn.close END SUB
Hvis brugeren glemmer at logge af, sker det automatisk når session udløber (efter ca 15 min)
arh... nu kan jeg se det.... ved ikke hvorfor men have ikke lige overvejet ...kode til logaf... dvs når sessionen ender køres logout siden auto og derved logges bruger af som hvis han selv havde linket til lgout via log ud linket på siden... SEJT
Global.asa kan mange smarte ting med Session og Application. Både når de startes og sluttes. Søg her på E og google hvis du vil lære mere. Mange bruger f.eks Application til at styre en "online liste".
min logout ser nemlig sådan ud og den er global.asa ikke så glad for... <% session.LCID=1030 Response.Buffer = True dtmDate = Request.QueryString("date") dtmToday = Date If dtmDate = "" Then dtmDate = Date Else dtmDate = CDate(dtmDate) End if intYear = Year(dtmDate) strMonth = MonthName(Month(dtmDate)) intDayOfMonth = Day(dtmDate) dtmFirstDate = DateAdd("d", (-intDayOfMonth)+1, dtmDate) intFirstDay = Weekday(dtmFirstDate, vbMonday) Function MyFormatDateTime(dato, datoFormat) MyFormatDateTime = FormatDateTime(dato, datoFormat) End Function Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/kongeloge.mdb") Conn.Open DSN function DBDate(fDate) DBDate = right("0"&month(fDate),2) &"-"& right("0"&day(fDate),2) &"-"& year(fDate) end function SQL = "UPDATE [konge] SET [sidstonline] = ('"& DBDate(dtmdate) &"'), [online] = 0 WHERE [id] = "&Session("id") Set rs = Conn.Execute(SQL) Conn.Close Set Conn = Nothing Session.Abandon Response.redirect "../index.asp" %>
nu har jeg ændret den til det du siger men når jeg logger ind på siden (cheker at online bliver sat til 1 i db'en -> lukker db'en igen) lukker browseren (alt+F4) og tjekker db'en igen her er online stadig 1 og ikke 0 som den ellers skulle være....
Nej. Funktionen bliver først kørt når session udløber. Det sker normalt 15-20 min efter brugeren sidst har loaded en side.
Du vil derfor først se den blive sat til 0 efter denne tid.
For tests skyld kan du dog sætte tiden ned. Det gør du ved bare at kalde denne linje et sted i din kode hvor du er sikker på den bliver kørt (f.eks login siden):
nu har jeg siddet og ventet i op til 30 min efter jeg har lukket IE og når jeg så åbner min db er der ikke sket nogen ændring i online feltet (det er stadig = 1, i stedet for 0)
Ahh ja, OnEnd har vi jo ikke adgang til Server.MapPath, så du skal have den fulde sti indskrevet. Tjek den ved at lave en response.write Server.MapPath ("/fpdb/kongeloge.mdb"), og indskriv så den streng i DBQ. Bliver nok noget ala:
Vi kan også gemme værdien i Application også bruge den. OnStart har vi nemlig adgang til Server.MapPath:
Sub Application_OnStart Application("DNS") = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/kongeloge.mdb") End Sub
SUB Session_OnEnd Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open Application("DNS") conn.execute("UPDATE [konge] SET [sidstonline] = date(), [online] = 0 WHERE [id] = "&Session("id")) conn.close End Sub
Nu ser det sådan ud: SUB Session_OnEnd Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=D:\Domains\tourdefoxdecarvalho.dk\wwwroot\fpdb\kongeloge.mdb" Conn.Open DSN conn.execute("UPDATE [konge] SET [sidstonline] = date(), [online] = 0 WHERE [id] = "&Session("id")) conn.close END SUB
--> men det virker altså stadig ikke, har ventet i +20min og så kigget i dben hvor jeg stadig står som online.... skal det stå et bestemt sted i global.asa
SUB Session_OnEnd DIM Conn, DSN Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=D:\Domains\tourdefoxdecarvalho.dk\wwwroot\fpdb\kongeloge.mdb" Conn.Open DSN conn.execute("UPDATE [konge] SET [sidstonline] = date(), [online] = 0 WHERE [id] = "&Session("id")) conn.close END SUB
det virker bare simpelthen hen ikke.. nu har jeg prøvet at logge på siden, lukkede vinduet (explorer) og derefter lukkede computeren og da jeg tændte for computeren næste morgen og åbnede databasen var jeg stadig online....? kan man ikke gøre noget uden om .asa?
- har det nogen indflydelse at jeg lave det i FP2003? der generes jo auto. en global.asa fil. Alternativt hvordan laves denne selv?
Bemærk at global.asa er placeret i roden af mit site og ikke inde i /experten/824189 mappen.
Bemærk også at jeg ved logout bare kalder session.abandon. Det skaber automatisk et kald til session_onEnd som logger mig ud. Jeg kan også bare vente i lidt over et min så bliver jeg også logget ud.
hmm kan godt se hvordan det funger på din side... Men mit login er bygget en smule anderledes op, for jeg har en side hvor data indtastet (name+pass) og så en tjek side der kun er asp - altså tjekker data i db'en så kan ikke lige gennemskue hvordan jeg kan flette dit system ind på min tjek-side..
så har jeg en if session("logemedlem") <> true så redirectes der til login-siden..
Hvordan dit login fungere er irelevant i forbindelse med logout via global.asa. Så længe du bare gemmer brugerens database id i en session.
Det eneste du skal gøre er at tage global.asa fra mit eks og smide på dit site. Rette Application("db") til at pege på din database, også rette "Update brugere Set online = 0 Where Id = "&Session("id") så den passer med dine tabel/kolonne navne.
hmmm har flere db'er på min root så er ikke så meget for bare at bytte rundt... men nu ligger tråden her og når så det kan lade sig gøre vil jeg prøve.. kan se det virker hos dig og som du siger skal det også virke hos mig...
men takker for tiden og kode eks. og vil kigge på det senere, lukker nu måske stiller spm som efterhånden som jeg får kigget på det.
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.