Ingeting händer :(
Finns det inte något annat lösning?
Offline efter Session.TimeOut
51 svar · 1 746 visningar · startad av SGuncel · sida 2 av 3
Koden triggas inte när du stänger webbläsaren, bara så du vet. Servern har ingen aning om huruvida ditt fönster är öppet eller inte. Session_onEnd körs när sessionen dör, dvs antingen vid timeout eller om man kör session.abandon i asp-koden.
Hur ska jag göra så att statusen nlir Offline när man stänger webbläsaren?
Du får labba med javascript-eventet onunload. Sök på det här i asp-forumet så får du en massa läsbart om andra som undrat samma sak.
När du satt koden upddaterar när sessionen tar slut. Har testat det också men det fungerar inte heller.
Fungerar alltså koden när du lägger den på en separat webbsida och kör den i webbläsaren?
Nej, har testat allt men det fungerar inte.
Ok. På vilket sätt fungerar det inte när du kör koden på en egen sida? Felmeddelande?
Du har plockat bort "sub session_onend" och "end sub" ur koden när du kör den för sig själv?
Hjälp oss att leta efter felen på rätt ställe...
Jag har testat med att:
Lämna rutan kvar tills session tar slut
Stänga webbläsaren
För att om statusen ändras, men inget av dom händer och får inte felmeddelande.
Jag vet inte om du missuppfattar mig, så jag försöker igen.
Gör en sida som heter poo.asp:
Dim ObjConn
Set ObjConn = Server.CreateObject("ADODB.Connection")
ObjConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\home\xxx\xxx\xxx.xx\xxx\xxxx.mdb;"
Dim strSQL
strSQL = "UPDATE TLUsers SET UsrStats='Offline' WHERE LastUsrLogin<#"& DateAdd("n",Now(),-15) &"#"
ObjConn.Execute(strSQL)
ObjConn.Close
Set ObjConn = Nothing
Kör den sidan. Får du något felmeddelande? Uppdateras något?
Får inget felmeddelande och inget uppdateras.
Och du har poster i databasen som skulle uppdateras, dvs där LastUsrLogin är tidigare än för femton minuter sedan?
Japp, men har kolumen LastUsrLogin där det står vilken datum/tid användaren har loggat in. Session timmen är 15 min, när session dör eller när man bara stänger webbläsaren ska användarens status ändras till offline. kolumnen hetre UsrStats.
Du menar alltså, att när du kör en SELECT-fråga med samma villkor som UPDATE-frågan så får du poster tillbaka, men inga av dessa poster uppdateras när du kör din UPDATE?
(Om du nu bara ska uppdatera vilka poster som helst i session_onend i global.asa, varför sköter du inte bara det i presentationen istället? Dvs, när du ska visa vilka som är online, hämta bara en lista över de som varit aktiva den senaste kvarten? Som du kunnat läsa i många trådar här på webForum som handlar om samma sak; man kan inte alltid lita på att session_onend körs.)
Det jag menar t.ex. när tre användare loggar in samtidigt vid klockan 12:05.
Och sen vid 12:10 stänger två användare sina webbläsare o den tredje lämnar bara webbläsaren kvar och hans/hennes session dör. Så 12:25 dör allas session och efter vill jag att deras status ska bli Offline från Online.
Men hur menar du det du sa med de senaste kvarten?
Jag förstår vad du menar att du vill ska hända. Jag försöker dock få dig att testa lite alternativ, för att hitta felen i koden!
Om du skriver ut SQL-frågan med response.write istället för att exekvera den, så ser du ju vad den försöker göra. Den ska sätta alla användare offline, som senast loggade in för mer än femton minuter sedan.
Det jag ser nu är dock är att du har fel ordning på parametrarna i DateAdd. Skall vara:
DateAdd("n", -15, Now())
Sådant är mycket enklare att fånga upp när man skriver ut sin SQL-fråga med response.write istället för att exekvera den. Testa!
Men hur menar du det du sa med de senaste kvarten?
Om du loggar allt folk gör i en tabell så är det ju enkelt att bara hämta ut de som varit aktiva inom en kvart. Om du sätter folk till offline beroende på när de loggade in, så menar du alltså att man inte får besöka siten mer än en kvart i sträck.
Gjorde som du sa ocj jag fick ut: 2007-01-25 23:03:02 och jag logga in 23:17..
Vilket sätt skulle du rekomendera?
Jo, självklart ska dom få besöka sidan mer än en kvar :)
T.ex. om jag vill att användarens status ska ändras bara när han/hon sänger webbläsaren och inte när Sessionen tar slut.
Och sen undrar jag hur man gör så att Sessionen ska aldrig ta slut?
Vilket sätt skulle du rekomendera?
Jag skulle loggat all aktivitet (=sidläsning) någonstans, och sedan hämta en lista över alla som varit aktiva den senaste kvarten, från den loggen.
T.ex. om jag vill att användarens status ska ändras bara när han/hon sänger webbläsaren och inte när Sessionen tar slut.
Då får du söka, och läsa lite, om onunload, som jag skrev tidigare.
Och sen undrar jag hur man gör så att Sessionen ska aldrig ta slut?
Du får öka sessionstimeouten.
Session.Timeout = 2400
(anges i minuter.) Det finns alltså inget "aldrig" i detta fall.
Då menar du typ så här:
Kolumnen: LastUsrLogin
Sen skapa en kolumn som heter: LastUsrActive