Loped
9.04.2009, 11:59:22
Witam. Chcę zrobić aby pokazywało mi ilość użytkowników, którzy się zalogowali.(loguje się na sesjach). Nie wiem jak się do tego zabrać. Czy jakieś nowe pole w bazie... czy obsługa cookie's lub w jakiś sposób użyć crona. Dobrze aby np. po 2 min samo się wylogowywało. Dziękuje z góry za pomoc ;p
RubiX
9.04.2009, 12:04:01
Tworzysz tabele online
id | login | data (DATETIME)
podczas logowania dodajesz usera do bazy login i date ( NOW() )
Jak user chodzi po stronie to dajesz UPDATE where login=$_SESSION['login']
a oprócz tego skrypt kasujący gdzie data jest starsza od 2 minut czy jakoś tak
Dobrze zrobić też wybór danych z tej tabeli gdzie login=$_SESSION['login'] i jeżeli jest brak to dodajesz insertem login i date (bo npuser może chodzić po stronie zacznie czytać artykuł przez 10 minut a w tym czasie go skasuje z bazy bo czyta dluzej niz 2 minuty a jak przejdzie na inna czesc strony to go znowu dodaje ilepiej daj na 10-15 minut z tym wylogowaniem bo 2min to za krótko.
Najlepszym rozwiązaniem będzie użycie Session Handlera, o którym jest artykuł w wortalu
Loped
9.04.2009, 12:10:15
Mam zrobione coś takiego:
Kod
<?php
require('includes/sessions.php');
require('includes/config.php');
$czas=mktime();
$ip=$_SERVER['REMOTE_ADDR'];
$staryczas=mktime()-120;
mysql_query("DELETE FROM online WHERE time<'$staryczas'");
$link=mysql_query("SELECT ip FROM online WHERE ip='$ip'");
$ile=mysql_num_rows($link);
if (isset($_SESSION['prawid_uzyt']) && $ile==0)
{
mysql_query("INSERT INTO online VALUES(NULL,'$ip','$czas')");
}
else
{
mysql_query("UPDATE online SET czas='$czas' WHERE ip='$ip'");
}
$link=mysql_query("SELECT * FROM online");
$ile=mysql_num_rows($link);
echo 'Osób online: '.$ile.'
';
?>
Jak się zaloguje, i odświeżę to dodaje mnie do tabeli "online" lecz po 2 min nieobecności mnie nie kasuje...
RubiX
9.04.2009, 12:16:51
a w time masz DATE TIME czyDATETIME ?
Loped
9.04.2009, 12:24:07
Juz naprawione. Podałem złe pole ;P. Ale jeszcze jedno pytanie. Czy ten skrypt jest bezpieczny? Czy nie zaśmieci mi zbytnnio bazy? I jak zrobić jak sie wylogowuje to od razu mnie kasowało w tej tabeli "online"?
mcgsoft
9.04.2009, 12:28:28
Do skryptu który usuwa sesje dopisz część do usuwania wpisów z tabeli po uzytym loginie.
Loped
9.04.2009, 12:46:49
Zrobiłem tak, ze dodaje nazwe użytkownika zalogowanego do tabeli online. Jak mam zrobić aby wyświetlało mi coś w stylu "Użytkownicy online: Loped, blabla "
jak powinien wyglądać ten kod? ;P
mcgsoft
9.04.2009, 12:56:28
W telegraficznym skrócie:
<?php
print "zalogowani użytkownicy: "; $zapytanie=mysql_query("SELECT * FROM tabela_z_logami", $connection);
print $wiersz['login'].", "; };
?>
mniej więcej.
Loped
9.04.2009, 13:50:19
Teraz mam taki problem.. Kiedy nie jestem zalogowany jest ok. Ale jak sie zaloguje i wylogowuje czas nadal się zmienia w tabeli "online" po odświeżeniu strony. o to kod:
Kod
if (isset($_SESSION['prawid_uzyt']) || $ile==0)
{
mysql_query("INSERT INTO online VALUES(NULL,'$ip','$czas', '$nazwa_uz')");
}
else
{
mysql_query("UPDATE online SET czas='$czas' WHERE ip='$ip'");
}
nospor
9.04.2009, 13:53:46
zacznij uzywac wlasciwego bbcode [php]
No przeciez niewazne co, ty albo dodajesz albo updatujesz , wiec sie nie dziw ze ciagle cos sie zmienia

edit:
a jesli chodzili ci o inserta, to albo
isset($_SESSION['prawid_uzyt'])
albo
$ile==0
jest prawdziwe, wiec ci robi inserta
Loped
9.04.2009, 14:40:19
Jeszcze jedno pytanie ^^. Jak zrobić aby np. po 10 min automatycznie wylogowywało(kończyło sesje)?
mcgsoft
9.04.2009, 14:50:58
guitarnet.pl
9.04.2009, 17:26:21
alternatywnie: na plikach sesji pod warunkiem ze dla kazdej domeny pliki sesji trzymane sa w osobnych katalogach tmp w przeciwnym wypadku wynik jest zafalszowany, plus rozwiazania brak obciazenia bazy
function users_online()
{
if ( $directory_handle = opendir( session_save_path() ) )
{
$count = 0;
while ( false !== ( $file = readdir( $directory_handle ) ) )
{
if($file != '.' && $file != '..')
{
$count++;
}
}
closedir($directory_handle);
return $count;
}
else
{
return '1';
}
}
Loped
11.04.2009, 16:09:08
Mam coś takiego:
Kod
$span = (time() - 180);
$la = $lacz -> query("SELECT nazwa_uz FROM uzytkownik WHERE czas>=".$span." ORDER BY id ASC");
Jak mam napisac pętle while do tego aby pokazywało mi nicki zalogowanych? ;P
erix
11.04.2009, 16:12:59
Przeczytaj jakiś kurs PHP+MySQL... Nie będziemy budować wież bez cegieł, czyli skryptów bez podstaw.
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.