Da, moj algoritam ima taj (velik) nedostatak.
Ali sljedeći zato nema te se takav koristi u ovim i sličnim slučajevima.
U bazi imaš tabelu logirani sa poljima: korisnik_id INT | zadnja_izmjena INT
Ako je korisnik logiran, pri svakoj izmjeni stranice updateaš
zadnja_izmjena s
time(). To ćeš učiniti tako što na vrh svake stranice staviš funkciju koja to radi.
Kada dođe Jure i hoće se ulogirati, tvoj sistem provjerava da li u tabeli logirani postoji unos čiji je korisnik_id Perin (recimo da je njegov id 5, dakle provjeravaš da li postoji unos where korisnik_id=5), ali, moraš također provjeriti da li je vrijednost zadnja_izmjena viša od vrijednosti time() - razdoblje_neosvježavanja (kojeg ti sebi definiraš, to je najčešće 5 ili 10 minuta, dakle: 60*10). Ako su obadva uvjeta točna, znači da je Pero ulogiran, a ako je jedan od ta dva uvjeta netočan, znači da nije. Po tome dalje postupaš s Jurom.
Evo ti i query za to:
Citiraj:
Autor sql query
SELECT korisnik_id FROM logirani WHERE korisnik_id = $user* AND zadnja_izmjena > $time**
|
* pretpostavimo da ti u varijabli $user stoji id trenutno ulogiranog (inače stoji u $_SESSION['nesto'], ali eto)
** $time prije u php kodu definiraš: $time = time() - 60*10;
-> naravno, query ide bez zvjezdica
Ako dobiješ rezultat, Pero je ulogiran, ako ne - nije.