Slasher McKagan
14.05.2006, 18:48:22
Witam!
Napisałem prosty skrypt. Rejestracja, logowanie uzytkownikow + zmiana ich danych. Teraz chciałem, zrobić blok w ktorym wyświetlać się będzie lista zalogowanych użytkowników. Mysle - żaden problem, przy logowaniu się, do bazy prefix_session dodam dane:
id | nid | nick | data | ip |,
a potem tylko select, przy wylogowywaniu się usuwam te dane, ale nie w tym tkwi mój problem. Co w przypadku gdy użytkownik się nie wyloguje? Oczywiście blok dalej będzie wyświetlał jego dane, więc jak usunąć te dane bez kliknicia w link wyloguj w przypadku gdy użytkowik nie jest aktywny przez np. 15 minut ? Proszę o jakąś podpowiedź

)
Z góry dziękuje
Pozdrawiam
Slasher
ActivePlayer
14.05.2006, 18:51:14
moze lepiej przechowuj dane ostatniej aktywnosci usera. Czyli jesli zalogowany user robi 'cokolwiek' wpisujesz ten czas do bazy, np w tabeli z jego danymi. A pokazywanie ludzi 'on line' to kwestia wybrania wszystkich ludzi, którzy czas aktywnosci ustawiony mają na młodszy niz 15 min temu.
__
Zachęcam do rejestracji na forum.
The Night Shadow
14.05.2006, 18:52:37
Hmm... ja miałem kiedyś podobny problem. Napisałem w związku z tym funkcje, która usuwała z tabeli SESSION wszystkie rekordy z czasem mniejszym od ustalonego przeze mnie (10 minut). Co przy okazji powoduje, że brak aktywności użytkownika przez 10 minut powoduje jego automatyczne wylogowanie. W tabeli SESSION dodałem kolumnę OSTATNIA_AKTYWNOŚĆ. Na każdej z podstron to pole jest aktualizowane dzięki czemu wylogowanie następuje nie po 10 minutach od zalogowania, a od ostatniej aktywności.
Active... a co z rekordami, które pozostają? Ja je usuwam, a Ty proponujesz pozostawiać i wybierać tylko z odpowiednią datą ostatniej aktywności użytkownika. W Twoim rozwiązaniu potrzebne byłoby kolejne zapytanie o istnienie rekordu użytkownika w tabeli SESSION. Licząc, że kiedyś tam wszyscy użytkownicy byliby zalogowani, czyli posiadali by odpowiadające im rekordy w tej tabeli, miałoby się po prostu drugą tabelę z danymi użytkowników. Czy przy dużej ilości użytkowników nie bardziej wydajnym jest pozostawianie jedynie danych użytkowników ostatnio aktywnych?
Slasher McKagan
14.05.2006, 19:00:48
Proszę mnie poprawić jeśli źle myśle:
No więc. Do tabeli _users dodaj pole ostatnia_aktywność, któro będzie przechowywało date. Tworze plik.php includowany do kazdej podstrony(?), w którym robię update tej daty. Potem robię select daty, ale tylko tej wcześniejszej przykładowo 10 minut (19,50 to robie select <19,40)

@The Night Shadow nie chodzilo mi o to, zeby user sie wylogowal po tych 15 minutach

Bo co jeśli zaznaczył opcje "zapamiętaj mnie"
ActivePlayer
14.05.2006, 19:06:08
tak, dokładnie to mialem na mysli. minusem jest ze liczysz tylko zarejestrowanych online. zeby liczyc tez nie zarejestrowanych najlepiej otworzyc sobie tabele na takie wpisy, ale nie łączyc ich w zaden sposob z logowaniem, tylko np z id sesji.
The Night Shadow
14.05.2006, 19:08:47
Hmm... więc w zależności od tego, czy jest zapamiętany, czy nie wylogowujesz, go lub nie... :- ) Zwiększa to możliwości portalu.
Wykonujesz select użytkowników z tabeli USERS dla których w tabeli SESSION ostatnia_aktywnosc < 10 minut
Guest
14.05.2006, 19:09:22
No więc następna myśl mi się nasuwa

)
Każdy zalogowany użytkoniwk posiada u mnie sessje
<?php
$_SESSION['zalogowany]
?>
. Więc stworze plik.php includowany do kazdej podstorny, z polami
id | nick | data | ip
jezeli
<?php
$_SESSION['zalogowany']=='0';
?>
pole nick, zawierać będzie wartość guest/gość czy jak sobie to nazwę, jeżeli 1, to jego nick. Następnie select != gosc/gest and data = data-10 minut

i delete * wher data = data-11/10
ActivePlayer
14.05.2006, 19:14:29
Cytat
Następnie select != gosc/gest and data = data-10 minut

i delete * wher data = data-11/10

!= gosc/quest to pobierasz wszystkich userów zalogowanych a == gosc jesli chcesz niezalogowanych.
Musisz pamietac tez ze jesli ktos juz jest w tabeli to robisz update a nie insert
M45t3r
14.05.2006, 19:16:13
ok to zamiast nick, id kolesia, wiec jezeli cos zmienie to bedzie dalej ok. i z ta kolumna to sie dobrze rozumiemy

). Podsumowując.
Tworze tabele _sesion z polami
id | z | nid | data | ip
przy kazdym wejsciu update daty
wyswietlanie, data > data-10, i z = 1
delete where data ...
..sie nie zgadza:P

@activeplayer, wiem

)
The Night Shadow
14.05.2006, 19:18:13
Active... a co z tym usuwaniem rekordów wylogowanych użytkowników? Lepiej to robić, czy nie? :- ) W momencie, gdy użytkownik nie ma zaznaczonej opcji ZAPAMIETAJ MNIE po wylogowaniu następuje zapisanie, go jako gość... jeśli więcej na stronę nie zajrzy jego rekord zostanie i tak usunięty przy wizycie jakiegokolwiek użytkownika.
ActivePlayer
14.05.2006, 19:26:33
@TNS, tak jak piszesz. To czysta logika. Ile ludzi tyle implementacji. Pewnie nie jeden by to jeszcze 'mądrzej' niz my tutaj wymyslił.
M45t3r
30.05.2006, 14:25:03
No wiec ok, zrobilem (prawie) ale zostal jeden blad... gdy gosc odswiezy strone, to dodaje go jeszce raz do bazy, jak temu zapobiec

wstawic ciastko
setcookie('jest', ''); i sprawdzac czy jest ? jesli jest to update (ale jak rozroznic goscia

) a jak nie ma to insert

tutaj kod...
<?php
function session()
{
$ip = $_SERVER['REMOTE_ADDR'];
if(isset($_COOKIE['nick']) && isset($_COOKIE['pass'])) {
$query = "SELECT * FROM `pixarcell_users` WHERE nick ='".$_COOKIE['nick']."'";
{
if($row['pass']==$_COOKIE['pass'])
{
$_SESSION['zalogowany']='1';
}
else
{
$_SESSION['zalogowany']='0';
}
}
}
else
{
$_SESSION['zalogowany']='0';
}
//----------------------------------------------------------------------------//
$dataDoSkasowania = $data-1;
if($_SESSION['zalogowany']=='1')
{
$query = "SELECT id FROM `pixarcell_users` WHERE nick ='".$_COOKIE['nick']."'";
{
$idZalogowanego = $row['id'];
$sql = mysql_query("SELECT * FROM `pixarcell_session` WHERE nid = ".$row['id'].""); if( $czyJestZalogowany=='0')
{
$query = "INSERT INTO `pixarcell_session` VALUES ('NULL', '".$_SESSION['zalogowany']."', '".$row['id']."', '".$data."', '".$ip."')";
if($result)
{
echo 'Dodany do bazy usera ...';
}
}
else
{
$query = "UPDATE `pixarcell_session` SET data = '".$data."' WHERE nid = '".$idZalogowanego."'";
if($result)
{
echo 'Uaktualniono dane'; }
}
}
}
else
{
$query = "INSERT INTO `pixarcell_session` VALUES ('NULL', '".$_SESSION['zalogowany']."', '', '".$data."', '".$ip."')";
if($result)
{
echo 'Dodany do bazy goscia...'; }
}
$query = "DELETE FROM `pixarcell_session` WHERE data < '".$dataDoSkasowania."'";
if($result)
{
echo '<br />wyjebales..'; }
}
function PokazZalogowanych()
{
$query = "SELECT * FROM `pixarcell_session` WHERE z = '1'";
{
}
echo 'Zalogowanych użytkowników '. $zalogowanychUserow; //-----------------------------------------------------------------//
$query = "SELECT * FROM `pixarcell_session` WHERE z = '0'";
{
}
echo '<br />Gości '. $anonimowychUzytkownikow;
}
?>
nospor
30.05.2006, 14:30:41
Cytat
gdy gosc odswiezy strone, to dodaje go jeszce raz do bazy, jak temu zapobiec

http://forum.php.pl/index.php?showtopic=44383
M45t3r
30.05.2006, 14:36:20
a wracajc do drugiego pytania; jak rozroznic goscia ? po IP ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.