Tjena! jo det borde funka >Men ska man köra igenom alla medlemmar som har statusen online >Problemet är att man inte har något kvar som identifierar användaren. > Problemet är att man inte har något kvar som identifierar användaren. (Fredda) Hej igen. En grej man kan göra är ju att tex när man ska presentera de som är online så tar man de som tex uppdaterat sig själv genom att vara inne på olika sidor på min sida alltså... Att man då tar de som varit inne de senaste fem minutrarna... Fast grejen är den att jag har alltid en ONLINE eller OFFLINE bild på varje medlems "hemsida" lixom... och kan inte göra det genom en sån kod, eller kanske kan, men det verkar väldigt krångligt isåfall... Eller? Hehe... Johan: Säg till när den är klar... Okay?! ganska ogenomtänkt att springa ner en massa gånger till databasen för att skriva och läsa och ha sig, speciellt om det börjar bli lite tryck på sidan... en roundtrip till dbn varje gång .. Tjena Patrik... typ ngt sådant hära Fick mig en funderare. På många sidor man besökt så har dom så att ett nytt fönster öppnas när man lämnar sidan eller stänger webläsaren, antar att det är gjort med något javascript?! Jepp, det kan man oxå göra. >Johan: Säg till när den är klar... Okay?!Tänkte skippa Global.asa och köra med detta, eller?
Jag har alltid kört med att GLOBAL.ASA triggas när någons sessions avslutas.
Detta har alltid funkat i vått och torrt om man säger så men det börjar bli lite mer tryck på sidan nu lixom och har upptäckt att den triggar allt färre.
Så jag tror jag får lägga om strategin så att jag kollar på varje sida och på så sätt löser det.
Men har inte allt klart för mig lixom, så ja... läs vidare.... ;)
- När medlemmen loggar in sätts kolummen "status" till "Online"
- När medlemmen loggar in sätts ett SessionsID i kolummen "SessionID"
- När medlemmen loggar in sätts det en tid i formatet "Now" i kolummen "TimeUpdate"
Sen så när medlemmen besöker en sida så skall en kod köras som uppdateras tiden i kolummen "TimeUpdate".
Men det är här... Som mitt lilla tänkande blir lite suddigt och dimmigt...
Om medlemmen inte är online längre, alltså om dennes session inte längre finns ska det bli Offline...
Men ska man köra igenom alla medlemmar som har statusen online och kolla av om just den medlemmens sessions finns kvar, gör den inte det så ska det skrivas Offline istället... Eller?
Funkar det att göra på detta sättet tros? Tips... Tack!Sv: Tänkte skippa Global.asa och köra med detta, eller?
kör även så att klienten inte kan backa eller gå vidare
fast session:en är död,
dvs kolla finns en cookie/session kvar
så är han ok:ad annar "åker han ut"
och får logga in igen, och ev säga att session:en har time:at utSv: Tänkte skippa Global.asa och köra med detta, eller?
>och kolla av om just den medlemmens sessions finns kvar, gör den
>inte det så ska det skrivas Offline istället... Eller?
Nej, tror inte att det går att göra så ens. Gör istället så att när du ska kontrollera on en användare är online så jämför du dennes "uppdateringsdatum" med aktuell tidpunkt, skiler det mindre än en bestämd tid är användaren online.
/JohanSv: Tänkte skippa Global.asa och köra med detta, eller?
Hej.
Problemet är att man inte har något kvar som identifierar användaren.
Cookien är borta liksom sessionen.
Eller hur menar ni?Sv: Tänkte skippa Global.asa och köra med detta, eller?
Varför behöver du identifikation av användaren? När användaren inte är kvar behöver du inte göra något, den kommer ju snart "timea out" ändå... Lite svårt att beskriva, men jag tänkte skriva en kurs i ämnet någon kväll i veckan eftersom det är flera som har frågat samma sak. Så om du kan vänta några dagar kommer ett förslag där.
/JohanSv: Tänkte skippa Global.asa och köra med detta, eller?
Men då man kör med global.asa så har jag ju SessionID för att hitta rätt medlem vettu....Sv: Tänkte skippa Global.asa och köra med detta, eller?
JohanD:
Jag är helt inne på din linje. Jag menade de översta funderingarna...
*Cosmo Kramer*:
Du kommer inte att kunna identifiera användaren för att tala om att just han/hon är utloggad. Du har alltså ingenting kvar som binder en användare till ett sessionsID.
Jag tror inte man kan kolla alla serverns sessioner, bara den specifika användarens.... (Rätta mej om jag har fel här...)
Mitt tips är att följa Johans förslag...Sv: Tänkte skippa Global.asa och köra med detta, eller?
Fast nu när jag har mitt vanliga system så händer det att en eller två stycken fortfarande visas online efter en typ tre timmar... Men då blir dom offline, efter några timmar trots allt...
Känner mig väldigt splittrad asså... *Fundersam...*Sv: Tänkte skippa Global.asa och köra med detta, eller?
Resten: Någon som kan sätta ihop en liten kod som tar fram de medlemmar som uppdaterad sin kollum "OnlineUpdate" de senaste 10 minutrarna...
/ JSv: Tänkte skippa Global.asa och köra med detta, eller?
skapa ett globlat cache objekt istället där det lagras, så är det endats roundtrips till interminnet.. mycket snabbare och mycket enklare att skala upp för minnesbrsit än diskaccess hastighet ...
// patrikSv: Tänkte skippa Global.asa och köra med detta, eller?
Det där är väl överkurs för mig alltså...
Lust att förklara närmare...?!Sv: Tänkte skippa Global.asa och köra med detta, eller?
I global.asa skriver du in denna rad längst upp,utanför scriptbocket:
<object runat="Server" scope="Application" id="rstOnline" progid="ADODB.Recordset"></object>
I Application_OnStart lägger du detta:
'## -- använda konstanter i recordsetet. vi slipper adovbs.inc --
Const adInteger = 3
Const adDate = 7
'## -- skapa recordsetet --
Set rstOnline = Server.CreateObject("ADODB.Recordset")
'## -- skapa fälten som behövs för recordsetet --
rstOnline.Fields.Append "MID", 3 '## -- här sparas medlemens unika id
rstOnline.Fields.Append "Started", 7 '## -- datum för inloggning
'## -- öppna recordsetet --
rstOnline.Open
Skapa sedan en funktion som lägger till respektive uppdaterar detta globala recordset.
Sub Add(ByVal MemberID)
rstOnline.Filter = "MID = " & MemberID
If rstOnline.EOF Then
rstOnline.AddNew
rstOnline("MID") = MemberID
rstOnline("Started") = Now()
rstOnline.Update
End If
End Sub
Sub Delete()
rstOnline.Find "Started < " & DateAdd("n",5,Now()), 0, 1, 1
rstOnline.Delete 1
End Sub
subbarna add och delete inkluderas på de sidor som du vill ska känna av de som är online
otestat, men ngt liknande borde funka
cya,
PatrikBSv: Tänkte skippa Global.asa och köra med detta, eller?
Kan man då inte använda det när det gäller att sätta någon offline också? Min tanke är att när man lämnar sidan eller stänger webläsaren så öppnas ett litet fönster med en text typ "Tack, du loggas nu ut!" Därefter kan ju fönstret stängas automatiskt, som typ Pelles pop-up fönster som kommer upp efter man röstat i pollen.
I detta fönster som öppnas kör man då en SQL sats som sätter en eventuell kolum i databasen till offline, samt tar bort en eventuell satt cookie?
Skulle inte detta kunna funka?
/TotteSv: Tänkte skippa Global.asa och köra med detta, eller?
Man kan lägga till en cookie oxå så att subben Add() inte mer än en ggn per besökare .... om du använder koden jag gav ovan alltså ... :D
cya,
PatrikBSv: Tänkte skippa Global.asa och köra med detta, eller?
Till! Det tog lite tid innan den kom upp dock...
http://www.pellesoft.nu/login/articles/asp/online.asp
/Johan