webForumDet fria alternativet

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

PHPur PHP

16 svar · 845 visningar · startad av Smultron

SmultronMedlem sedan juli 2002423 inlägg
#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?

MeleaMedlem 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.

SmultronMedlem sedan juli 2002423 inlägg
#3

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

SmultronMedlem sedan juli 2002423 inlägg
#4

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

WiZzLeRMedlem 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.

SmultronMedlem 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...

MeleaMedlem 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");

SmultronMedlem sedan juli 2002423 inlägg
#8

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

MeleaMedlem 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?

WiZzLeRMedlem 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.

MungoMedlem 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...

SmultronMedlem sedan juli 2002423 inlägg
#12

jo det är bra...thx

PeddaMedlem sedan juni 20006 032 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);
FuelMedlem 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");
MeleaMedlem 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! ;)

FuelMedlem sedan okt. 20001 285 inlägg
#16

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

PeddaMedlem sedan juni 20006 032 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. ;) :)

139 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)