Avatar billede Slettet bruger
30. juni 2009 - 17:13 Der er 12 kommentarer og
1 løsning

Sidst online - dumt at opdatere hvert sekund?

God eftermiddag folkens..

Jeg har lavet et utroligt simpelt "script", hvor jeg har tilføjet en tabel i min brugerdatabase ved navn online, som så bliver opdateret med den aktuelle tid når brugerne er inde på sitet. Det sker blot på følgende måde:

$sql = "UPDATE min_database SET online = NOW() WHERE id=".$_SESSION["min_brugerid_session"];
$completed = mysql_query($sql);

Jeg er dog kommet i tvivl om hvorvidt det vil overbelaste serveren eller ej på den måde jeg gør det..

Online tiden bliver for hver bruger opdateret når:
- Vedkommende logger ind
- Vedkommende besøger siden (hvis cookies er sat fra forrige besøg)
- Vedkommende klikker rundt på siden med forskellige brugerrettigheder (dvs. på stort set hele sitet)


Hvis alt går efter hensigten vil der komme en jævnt stor brugerkreds, og når de er logget ind vil databasen altså blive opdateret mere eller mindre hvert sekund for hver enkelt bruger..

Vil det belaste serveren for meget tror i?

I så fald, har i evt. et andet forslag/guide til hvordan jeg i stedet kan gøre det.. Læste en enkelt artikel herinde med nogle iframes, men syntes ikke helt den virkede så "god" igen..
Avatar billede arne_v Ekspert
30. juni 2009 - 17:40 #1
Det lyder dyrt i resourcer.

Kan du ikke taelle op ved session start og ned ved session end?
Avatar billede keysersoze Ekspert
30. juni 2009 - 18:05 #2
Der er ingen tvivl om at det er dyrt i ressourcer - men løsningen afhænger i høj grad af hvor præcis du vil være. Hvis værdien skal være 100% præcis er du nødt til at gøre det som nu - og kan du tåle at være lidt upræcis så opdatér tidspunktet når brugeren logger ind og besøger siden (ved cookies), herefter opdaterer du kun en session hver gang brugeren klikker rundt på siden og ved session timeout gemmer du værdien i databasen igen (og evt med et vist minut interval for lidt højere præcision).
Avatar billede arne_v Ekspert
30. juni 2009 - 18:53 #3
Jeg forstaar ikke hvorfor det skulle vaere mere praecist at logge ved hver side.

Hvis man ved eksplicit logout logger NOW og ved session timeout logger NOW-TIMEOUTVAL saa burde det logger tidspunkt for sidste opage load.
Avatar billede keysersoze Ekspert
30. juni 2009 - 19:11 #4
Det er heller ikke nødvendigvis mere præcis end dit sidste forslag (men trods alt lidt fra bare at tælle op og ned, men mon ikke det bundede i at spm ikke var tolket helt korrekt) - min tanke med det gik bare lidt på, at der let kunne være noget på siden der holdt brugersessionen kunstigt i live (annonce-refresh eller lignende) og med min session-værdi blev der logget et præcist tidspunkt for brugerens sidste egentlige handling og ikke en mulig automatisk handling på siden.
Avatar billede Slettet bruger
30. juni 2009 - 19:25 #5
Arne_V:
Hvis jeg tæller op når mine sessions startes er det ligeledes på hver side, så der vil i og for sig ikke være nogle forskel hvis jeg forstår dig rigtigt ;) ?

keysersoze:
Det er faktisk præcis det samme som ovenover. Når brugeren klikker rundt på siden bliver online-tiden også opdateret som det ser ud nu :S Den opdaterer ikke hvis man bare "idler" på siden og ikke klikker rundt eller foretager sig noget ;)
Avatar billede keysersoze Ekspert
30. juni 2009 - 19:49 #6
ja - resultatet vil i sidste ende blive præcis det samme, men du undgår den konstante belastning på databasen.
Avatar billede majbom Novice
30. juni 2009 - 19:51 #7
din session starter jo ikke på hver side bare fordi du kalder session_start.

den bliver oprettet så snart brugeren kommer ind på siden og bliver vedligeholdt så længe brugeren klikker rundt på dit site, medmindre at der går længere tid imellem klikkene end session_timeout er sat til.
Avatar billede keysersoze Ekspert
30. juni 2009 - 20:04 #8
ja - det ved jeg godt, eller var det ikke til mig?
Avatar billede majbom Novice
30. juni 2009 - 20:09 #9
-> #8 - det regnede jeg også med atdu var klar over ;) det var til spørger :)
Avatar billede Slettet bruger
30. juni 2009 - 20:32 #10
splazz:
Jeps okay, jeg misforstod blot arne_v så..

Men hvordan laver jeg en forespørgsel på hvornår session times ud for hver enkelt besøgende, så jeg kan opdatere tiden der? :)

Er stadig ikke sikker på at jeg har forstået det rigtigt, men jeg giver varmen skylden i dag.. ( :D )
Avatar billede keysersoze Ekspert
02. juli 2009 - 17:54 #11
Jeg er ikke PHP-mand så kodemæssigt kan jeg ikke give noget - men et gæt kunne være at der kunne findes noget her; http://dk2.php.net/manual/en/function.session-set-save-handler.php
Avatar billede Slettet bruger
04. juli 2009 - 03:12 #12
Jeps okay, takker... Jeg prøver at kigge lidt på det

Dem af jer, der gerne vil have points må lige smide et svar ;)
Avatar billede keysersoze Ekspert
04. juli 2009 - 08:12 #13
svar :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester