Avatar billede kongfjong Nybegynder
02. april 2005 - 20:52 Der er 20 kommentarer og
1 løsning

Antal brugere online

Hey;

Hvordan kan man tjekke, hvor mange brugere der er online? Jeg bruger Sessions til mit login-system:)
Avatar billede alister_crowley Nybegynder
02. april 2005 - 20:55 #1
ved at lægge en værdi (ip?) ind i en databse sammen med et timestampt, og så checke hvor mange der er online.

Med f.eks. 5 eller 10mins afstand, så rydde, hvis folk ikke har bevæget sig.

Udvikleren.dk har en artikel omkring emnet.
Avatar billede alister_crowley Nybegynder
02. april 2005 - 20:56 #2
Avatar billede kongfjong Nybegynder
02. april 2005 - 21:02 #3
Okay tak:) Kigger på det:)
Avatar billede bromer Nybegynder
02. april 2005 - 21:04 #4
Hvis du laver en tabel, der minder om denne

create table online (
user_id integer NOT NULL,
php_session varchar(32),
last_seen datetime,
PRIMARY KEY(php_session)
);

når en side bliver ramt skal du så indsætte i denne tabel, det kunne du gøre med

REPLACE INTO online SET last_seen = NOW(), user_id = <user_id_eller_0>, php_session = <sess_id>

Hvis du tilføjer et session id til en bruger når denne rammer din side for første gang vil dette følge ham rundt og på hver side vil dette blive opdateret. Hvis han så vælger at logge ind vil hans bruger id blive indsat i online tabellen. Hvis en besøgende ikke er logget ind skal du bare indsætte 0 i den kolonne.

Når en bruger logger ind er det nok en god ide lige at fjerne gamle rækker med dette bruger_id hvilket du gør med

DELETE FROM online WHERE user_id <den bruger der lige har logget ud>

Antallet af online _bruger_ er så givet ved
SELECT count(DISTINCT(user_id)) as online_bruger FROM online WHERE user_id > 0 AND DATE_ADD(last_seen, INTERVAL 15 MIN) > NOW()

Antallet af gæster er:
SELECT count(1) as guest_online FROM online WHERE user_id = 0 AND DATE_ADD(last_seen, INTERVAL 15 MIN) > NOW();

Og det totalt antal online er så summen af de to tal eller
SELECT count(1) as online from online DATE_ADD(last_seen, INTERVAL 15 MIN) > NOW();
Avatar billede bromer Nybegynder
02. april 2005 - 21:04 #5
det var jeg godt nok sent ude :)
Avatar billede detox Nybegynder
02. april 2005 - 21:34 #6
Da du bruger sessions kan osse bare tælle dine session filer. Fx:

printf("Antal brugere: %u", count(glob(session_save_path() . '/sess*')));
Avatar billede kongfjong Nybegynder
02. april 2005 - 22:50 #7
Kan du evt give en forklaring på din kode detox? Forstår den ikke helt...
Avatar billede bromer Nybegynder
02. april 2005 - 22:57 #8
konfjong: Du skal se på kode "indfra og ud". Så du starter med at undersøge hvad session_save_path() [1] gør. Det er så der man gemmer data fra sessions. Derefter bliver glob() [2] brugt og vi ser at det retunerer et array indeholdende alle paths der har formatet "her gemmer vi sessions"/sess*, hvilket vil sige at alle paths til sessions bliver lagt som elementer i arrayet. Så kan man jo bare tælle [3] antallet af elementer i arrayet for at få antal live sessions.

[1] http://dk.php.net/session_save_path
[2] http://dk.php.net/manual/en/function.glob.php
[3] http://dk.php.net/manual/en/function.count.php
Avatar billede detox Nybegynder
02. april 2005 - 23:00 #9
Den udskriver såmænd bare antallet af session filer. Men det kræver selvfølgelig at du sætter php til at rydde op i dine sessionfiler. Alt efter hvor mange brugere du har online samtidig må du sætte: session.gc_probability (måske helt op til 100%) i 'php.ini'. Ligesom: session.gc_maxlifetime ikke skal være for høj, omkring 60-120 (1-2 minutter).
Avatar billede detox Nybegynder
02. april 2005 - 23:03 #10
Måske løsningen med databasen alligevel er bedre ;O)
Avatar billede bromer Nybegynder
02. april 2005 - 23:14 #11
Der er fordele og ulemper ved begge løsninger. Din er ufattelig hurtig at implementere, mens database løsningen bliver lidt større muligheder med hensyn til settings, hvis man ikke har adgang til at ændre i php.ini
Avatar billede alister_crowley Nybegynder
03. april 2005 - 09:29 #12
bromer

REPLACE INTO ? er det ikke UPDATE der bør bruges ?
Avatar billede bromer Nybegynder
03. april 2005 - 11:00 #13
ikke umiddelbart. Vi vil jo gerne indsætte en ny række i tabellen hvis session-idet ikke findes. Og da jeg har oprettet session-id som primær nøgle vil det netop være en update når der allerede findes en række med samme session-id.
Avatar billede kongfjong Nybegynder
03. april 2005 - 17:44 #14
Mange tak for de mange svar:)

Da jeg nok hælder mest til alisters forslag skal han da have pointene:)
Avatar billede bromer Nybegynder
03. april 2005 - 18:30 #15
Med mindre du gerne vil have oplevelsen af at implementere noget ville jeg nok umiddelbart benytte detox forslag. Specielt hvis du har mulighed for at ændre i php.ini
Avatar billede kongfjong Nybegynder
03. april 2005 - 20:03 #16
Er ikke den store programmør, og tror ikke jeg har mulighed for at ændre i php.ini så alisters forslag ser mere overskueligt ud:)
Avatar billede bromer Nybegynder
03. april 2005 - 20:22 #17
Ja, det styr du bare helt selv :)
Avatar billede kongfjong Nybegynder
03. april 2005 - 20:50 #18
Hehe tak, tak;)
Avatar billede kongfjong Nybegynder
26. maj 2005 - 18:51 #19
svar alister?:D
Avatar billede kongfjong Nybegynder
21. november 2005 - 22:25 #20
Ligger du et svar alister_crowley?:)
Avatar billede kongfjong Nybegynder
28. juni 2006 - 14:33 #21
Lukker:)
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