Time system går amok ved nogle

Tags:    php

Hej har et time system i mit community, ved nogle tæller timerne hurtigere end ved andre. Altså fks hvis en sidder på i 10 min så får han 60 min. Det er kun ved 1 jeg har prøvet det. Hvad kan være årsag til det?

Den her kode har jeg smækket ind på en side som er åben når de logger ind til de logger ud!
Fold kodeboks ind/udKode 


Sådan ser min timer.php
Fold kodeboks ind/udKode 


Kan nogle progammer han har installeret have indflydelse i det? / Hvordan kan jeg løse problemet

[Redigeret d. 23/12-04 12:33:21 af Peter]



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Jeg har aldrig hørt om det før, men måske kunne det tænkes, at man med et plugin til sin browser, kun indstille på diverse ting - som fx refresh-rate? Det er jo browseren, der opdaterer det automatisk, og hver gang iframen refreses, lægges der ét minut til. Hvis man så sætter iframen til at refreshe hvert 1. sekund - eller gør man gør det manuelt, så bliver tiden jo forkert.

Fjern die (mysql_error()); når dit sted er oppe at køre. Og sæt @ foran mysql_query, da det fjerner alt output fra funktionen. Det giver meget værdifulde oplysninger til folk, der prøver at cracke dit system. Lav endvidere noget inputcheck på:

Jeg vil foreslå, at du finder på en anden måde at gøre det på - fx noget ala:
@mysql_query("UPDATE community SET onlinetid = onlinetid + " . floor ((time() + 5 - lastUpdate) / 60) . ", lastUpdate = " . time() . " WHERE navn = '" . str_replace("'", "", str_replace('%', '', $_SESSION[navn]')));

lastUpdate er et nyt felt, som du kan se - det er et timestamp, der opdateres hver gang onlinetid opdateres. Det er i og for sig lige meget, hvor ofte der så refreses. Der er lavet sådan, at lastUpdate hele tiden opdateres - det kan laves sådan, at det kun gøres, hvis onlinetiden ændres. Jeg har lagt 5 sekunder til tiden, for at undgå, at en opdatering sker ved 59 sek. ignoreres.

Jeg er ikke sikker på om det virker - er lidt træt i hovedet, men noget i den dur burde virke :-)

mikl-dk | udv@mikl.dk



Jeg har aldrig hørt om det før, men måske kunne det tænkes, at man med et plugin til sin browser, kun indstille på diverse ting - som fx refresh-rate? Det er jo browseren, der opdaterer det automatisk, og hver gang iframen refreses, lægges der ét minut til. Hvis man så sætter iframen til at refreshe hvert 1. sekund - eller gør man gør det manuelt, så bliver tiden jo forkert.

Fjern die (mysql_error()); når dit sted er oppe at køre. Og sæt @ foran mysql_query, da det fjerner alt output fra funktionen. Det giver meget værdifulde oplysninger til folk, der prøver at cracke dit system. Lav endvidere noget inputcheck på:

Jeg vil foreslå, at du finder på en anden måde at gøre det på - fx noget ala:
@mysql_query("UPDATE community SET onlinetid = onlinetid + " . floor ((time() + 5 - lastUpdate) / 60) . ", lastUpdate = " . time() . " WHERE navn = '" . str_replace("'", "", str_replace('%', '', $_SESSION[navn]')));

lastUpdate er et nyt felt, som du kan se - det er et timestamp, der opdateres hver gang onlinetid opdateres. Det er i og for sig lige meget, hvor ofte der så refreses. Der er lavet sådan, at lastUpdate hele tiden opdateres - det kan laves sådan, at det kun gøres, hvis onlinetiden ændres. Jeg har lagt 5 sekunder til tiden, for at undgå, at en opdatering sker ved 59 sek. ignoreres.

Jeg er ikke sikker på om det virker - er lidt træt i hovedet, men noget i den dur burde virke :-)

mikl-dk | udv@mikl.dk


Smed Javascript istedet for det andet. og nu virker det:) du skal ikke ikke snydes for dine pt for den tid du brugte!




Jamen jeg takker da for point :-)

Du skal dog være opmærksom på, at jo mere du kan overlade til serveren at bestemme, des bedre plejer det at være. Klienterne kan man ikke bestemme over (de kan lave deres eget program, der simulerer reload af din iframe hvert sekund, og på den måde stod til at have været online i laaaang tid - folk kan også have deaktiveret js, og folk der har det, får derfor ingen onlinetid). Nå, men nok om det :-)

God jul, og takker for point!

mikl-dk | udv@mikl.dk



Hvorfor ikke bare have login tid, og logud tid os så har du jo også hvor lang tid en bruger har været online.
og du slipper for en side der skal refreshes hele tiden, som i IE gir en irriterende kliklyd



Fordi det er et problem at registrere, hvornår en bruger logger ud...

mikl-dk | udv@mikl.dk



t