webForumDet fria alternativet

Bästa sätt för online/offline

PHP

16 svar · 845 visningar · startad av Smultron

Medlem sedan juli 2002423 inlägg
Frågan#1

Hejsan!
Jag joibbarp å en portal och jag har haft ett flertal lösningar på hur jag ska göra en method som visar antalet användare som är online och också Vilka som är online...

Användarna loggar in och en sessions skapas för användaren.

Vad är det bästa sättet för att visa om man är online eller offline på?
Någon som har förslag?

Medlem sedan juli 20033 147 inlägg
#2

Mja, varje gång en användare loggar in kan du ju uppdatera den spesifika användarens Status till "Online" och när personen loggar ut uppdaterar du den till "Offline"...

Sen om folk inte loggar ut kan du lösa det med att kontinuerligt (varje gång någon uppdaterar sidan) logga ut personer som inte varit aktiva från och med 30 minuter tillbaka eller dylikt.

Fixa alltså en datetime kolumn i databasen som uppdateras varje gång användaren uppdaterar sidan.

Medlem sedan juli 2002423 inlägg
#3

Försämrar inte det där prestandan en aning?

Medlem sedan juli 2002423 inlägg
#4

du menar att jag gör en funktion som kollar igenom alla användare också...

Medlem sedan juni 2002346 inlägg
#5

en tabell med timestamp, användare etc...
när användaren surfar runt på sidan så uppdateras timestampen och senaste timestap hämtas. när användaren har slutat surfa runt på sidan så dör timestampen efter X antal sekunder.

Medlem sedan juli 2002423 inlägg
#6

hmm...timestamp!?

utveckla...

jag tänkte mer att jag skapar två nya fält i "user" tabellen...

status och status_time

när man loggar in sätts status till 1 och så sätter man status_Time till datumet och tiden som det var

sen gör man en funktion som alla användare gör när de surfar runt på sidan, som kollar alla användar fält i databasen där status är 1 och så kollar den om status_time är äldre än 20 min och i sånna fall sätts status till 0 också...

på så sätt så kan man väl räkna alla som är inloggade lätt och man får också ett sätt att kolla vilka användare som är inloggade..

det dåliga med det är väl att det blir söligt att kolla igneom databasen varje gång någon uppdaterar sidan...

Medlem sedan juli 20033 147 inlägg
#7

Precis så jag menade. Och varje gång den spesifika användaren uppdaterar sidan sätts status_time till date("Y-m-d H:i:s");

Medlem sedan juli 2002423 inlägg
#8

mm exakt...men varje användare kollar igenom hela databasen varje gång sidan uppdateras med.

Medlem sedan juli 20033 147 inlägg
#9

Jo sant, kan vara lite krävande... men alltid så jag gjort :)

Någon annan som har förslag på hur man kan gå till väga?

Medlem sedan juni 2002346 inlägg
#10

Smultron skrev:

hmm...timestamp!?

utveckla...

jag tänkte mer att jag skapar två nya fält i "user" tabellen...

status och status_time

när man loggar in sätts status till 1 och så sätter man status_Time till datumet och tiden som det var

sen gör man en funktion som alla användare gör när de surfar runt på sidan, som kollar alla användar fält i databasen där status är 1 och så kollar den om status_time är äldre än 20 min och i sånna fall sätts status till 0 också...

på så sätt så kan man väl räkna alla som är inloggade lätt och man får också ett sätt att kolla vilka användare som är inloggade..

det dåliga med det är väl att det blir söligt att kolla igneom databasen varje gång någon uppdaterar sidan...

en unix timestamp, time(); . det är ett mycket enkelt sätt att leka med tid matematiskt. =) iaf jag kan skriva ihop ett script som jag tror skulle fungera så fort jag kommer hem. just nu sitter jag @ plugget och drygar. =)

jag har ett exempel på http://www.klanace.com/?s=online som jag har gjort.

Medlem sedan jan. 2000372 inlägg
#11

Lägg de som är online i en egen databastabell och kolla bara igenom den vid varje sidladdning enligt samma princip som ovan...

Medlem sedan juli 2002423 inlägg
#12

jo det är bra...thx

Medlem sedan juni 20006 031 inlägg
#13

Kan ju visa lite av den koden jag använder för online som ett exempel. Utav detta så får jag ut vilka som är inloggade, hur många gäster och var alla är på sidan. Men ska man bara ha hur många som är online så kan man ju förenkla det en del.

$now = time();

// Radera äldre än timeout_online
$query = ('DELETE FROM online WHERE logged<'.($now-300).' OR ident=\''.addslashes($cookie['username']).'\' OR ident=\''.get_remote_address().'\'');
mysql_query($query);
// Lägg till en ny. username och user_id om inloggad; ip och user_id=0 annars, lägger även till sidans namn ($page) och eventuellt id ($mid=tråd id, eller liknande)
$sql = ('INSERT INTO online (user_id, ident, logged, page, mid) VALUES(\''.$user_id.'\', \''.$ident.'\', '.$now.', \''.$page.'\', \''.$mid.'\')');
mysql_query($sql);
Medlem sedan okt. 20001 285 inlägg
#14

Pedda ... visst borde det räcka med att bara radera alla som har " timeout " ?

$usr_timeout = $now-300;
// Radera äldre än timeout_online
$query = ("DELETE FROM online WHERE logged < $usr_timeout");
Medlem sedan juli 20033 147 inlägg
#15

Fuel skrev:

Pedda ... visst borde det räcka med att bara radera alla som har " timeout " ?

$usr_timeout = $now-300;
// Radera äldre än timeout_online
$query = ("DELETE FROM online WHERE logged < $usr_timeout");

Du lyckades bumpa en tråd som är över två år gammal, grattis! ;)

Medlem sedan okt. 20001 285 inlägg
#16

OMG ! :L glömde att jag var på söksidan .. sorry :r

Medlem sedan juni 20006 031 inlägg
#17

Gammal tråd så jag kommer inte ihåg exakt hur jag använde koden. Men det var nog för att inte få dubletter, jag körde ju inte någon update om man var inloggad och bytte sida utan en ny insert istället. I vilket fall som helst så var det ju inte den smartaste lösningen. ;) :)

249 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)