Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][MySQL][PHP]Użytkownicy online czy offline?
Maxie
post
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 1
Dołączył: 19.10.2011

Ostrzeżenie: (0%)
-----


Mam do Was pytanie, jak, tak w teorii rzecz jasna sprawdzić czy użytkownik jest online? Domyślam się, że coś z pętla i bazą danych, ale to by było bardzo "interneto-ssące". Jak takie coś uczynić?
Go to the top of the page
+Quote Post
Dominator
post
Post #2





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Gdy użytkownik się loguje to w tabelce "logged" daj 1, a gdy się wylogowuje aktualizujesz na 0 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Maxie
post
Post #3





Grupa: Zarejestrowani
Postów: 82
Pomógł: 1
Dołączył: 19.10.2011

Ostrzeżenie: (0%)
-----


A gdy sesja sama się skończy? Tzw. wyjdzie ze strony, ale zalogowany będzie, aż do czasu, gdy się nie skończy sesja, i wtedy będzie pseudo online, przez cały czas, nie prawdasz?

Ten post edytował Maxie 30.06.2012, 21:28:07
Go to the top of the page
+Quote Post
CTRL
post
Post #4





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

Ostrzeżenie: (0%)
-----


Przy każdym załadowaniu strony wylogowywuj tych którzy mają czas ostatniej akcji większy niż np. 10 minut, a przy każdej akcji zapisuj czas kiedy ona nastąpiła, i id usera albo sesje

Ten post edytował CTRL 30.06.2012, 21:31:18
Go to the top of the page
+Quote Post
Natalka
post
Post #5





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 28.10.2009
Skąd: że znowu...

Ostrzeżenie: (0%)
-----


Ja robię to tak że zapisuję czas ostatniej "aktywności" w serwisie.
Na każdej podstronie sprawdzam aktywność użytkownika, razem ze skryptem sprawdzającym sesje użytkownika czy nie wygasła.

Mam taki system na kilku serwisach i działa wszedzie bez problemów i nie jest zbyt zasoobożerne.


Gdy ostatnia aktywność użytkownika jest starsza niż 5 minut, aktualizuję czas w bazie danych na teraźniejszy.
Na stronie wyświetlam użytkowników którzy byli aktywni w ciągu ostatnich 5 minut.

Czas można ustawiać według własnych zasad, u mnie 5 minut jest wystarczające.
-------

Automatycznego wylogowania nie polecam, każdy użytkownik może odejść na chwilę od komputera, podejdzie i zostanie wylogowany?
Skoro sesja nadal jest aktywna to niech aktualizuje czas, a nie wylogowywuje go.

Ten post edytował Natalka 30.06.2012, 21:32:52
Go to the top of the page
+Quote Post
Dominator
post
Post #6





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


No to napisz skrypt, że może być zalogowanym tylko przez 3600 sekund, gdy wartość jest większa to automatycznie przenosi do strony, gdzie ma nastąpić wylogowanie.

A potem w jQuery możesz to sprawdzać.
Go to the top of the page
+Quote Post
Niktoś
post
Post #7





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


A nie wystarczy użyć metody Session.autoRegenerate?Jeśli użytkownik nie będzie aktywny to sesja sama wygaśnie po tym można zrobić autowylogowanie.Jeśli użytkownik bedzie aktywny to sesja nie ulegnie przedawnieniu.
Go to the top of the page
+Quote Post
Dominator
post
Post #8





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cytat(Niktoś @ 30.06.2012, 22:36:35 ) *
A nie wystarczy użyć metody Session.autoRegenerate?Jeśli użytkownik nie będzie aktywny to sesja sama wygaśnie po tym można zrobić autowylogowanie.Jeśli użytkownik bedzie aktywny to sesja nie ulegnie przedawnieniu.


Ale tutaj się wiąże użycie klasy CakePHP. A pewnie kolega wolałby coś własnego wykombinować (IMG:style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
Maxie
post
Post #9





Grupa: Zarejestrowani
Postów: 82
Pomógł: 1
Dołączył: 19.10.2011

Ostrzeżenie: (0%)
-----


Session.autoRegenerate ? O co w tym chodzi, znaczy się jak to wykorzystać?
Go to the top of the page
+Quote Post
Dominator
post
Post #10





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cytat(Maxie @ 30.06.2012, 22:49:13 ) *
Session.autoRegenerate ? O co w tym chodzi, znaczy się jak to wykorzystać?


Session.autoRegenerate jest częścią frameworka CakePHP.
Go to the top of the page
+Quote Post
Maxie
post
Post #11





Grupa: Zarejestrowani
Postów: 82
Pomógł: 1
Dołączył: 19.10.2011

Ostrzeżenie: (0%)
-----


Myślę, że można by zrobić "migawkę" w javascripcie, która reloadowała by się co 5 sec przy czym by zmieniała w bazie offline / online jeżeli by było inaczej rzecz jasna, ale by było to zasobożerne, co o tym uważacie?
Go to the top of the page
+Quote Post
CTRL
post
Post #12





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

Ostrzeżenie: (0%)
-----


Myślimy o tym to, żebyś robił to nie co 5 sekund tylko co minutę. Albo więcej.
Go to the top of the page
+Quote Post
Dominator
post
Post #13





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Zrób stronę, która sprawdza czy od zalogowania nie minęło więcej niż 3600 sekund. Jeśli minęło to wylogowuje, a jeśli nie to po prostu pozostaje na stronie. Następnie w javascripcie przez funkcję setInterval sprawdzaj co 5000MS ową stronę.
Go to the top of the page
+Quote Post
Maxie
post
Post #14





Grupa: Zarejestrowani
Postów: 82
Pomógł: 1
Dołączył: 19.10.2011

Ostrzeżenie: (0%)
-----


A w tym przypadku, gdy ktoś będzie oglądał dłużej daną podstronę to wywali ;/ a nie chcę tak, chcę mieć rzetelną informację, czy ktoś jest w przeglądarce, na mojej stronie z włączoną sesją ;p
Go to the top of the page
+Quote Post
Niktoś
post
Post #15





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Cytat
Session.autoRegenerate jest częścią frameworka CakePHP

Dziwne, że tylko tam -opcja bardzo przydatna szczególnie w takich przypadkach.
Go to the top of the page
+Quote Post
modern-web
post
Post #16





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


Pomysły macie w sam raz ale pozwólcie, że podzielę się swoim (IMG:style_emoticons/default/smile.gif)
Nie możesz zapisywać tylko wartości 0/1 w zależności od statusu, bo co jeśli zamknę przeglądarkę...? będę nadal dostępny.
Najlepszym sposobem - skorzystaj z bazy danych (pliki odpadają z uwagi na szybkość zapisu i dostęp do danych), struktura: id|usr|time, id - A.I., usr - nick zalogowanego, time = wartość funkcji time().
Ok, masz już wszystko gotowe (IMG:style_emoticons/default/smile.gif) za każdym razem uruchamiaj taką funkcję (napisz ją sobie na podstawie tego co powiedziałem) i zapisuj WSZYSTKIE odświeżenia zalogowanych.
Jeśli chodzi o wyświetlanie listy - zwykłe zapytanie z GROUP BY `usr` (IMG:style_emoticons/default/smile.gif)
Aby nie zaśmiecać bazy ustaw również w początkowej funkcji odnajdowanie i usuwanie wyników nie spełniających kryteriów - np. ty chcesz jedynie ostatnie 5min, a w bazie masz także zapisy z ostatnich kilku godzin. (IMG:style_emoticons/default/smile.gif)
Polecam również skorzystanie z zapytania TRUNCATE, chyba, że lubisz mieć id o długości 20 znaków po kilku dniach (IMG:style_emoticons/default/wink.gif)

Pozdrawiam,
pytaj jak czegoś nie wiesz (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Giluś
post
Post #17





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


Kiedyś ktoś mi polecił takie rozwiązanie:

  1. $userid = $_SESSION['user'];
  2. $czas_teraz = mktime();
  3. if ($_SESSION['zalogowany'] + 60 < $czas_teraz) {
  4. mysql_query("UPDATE dragonball_gracze SET zalogowany='".$czas_teraz."' WHERE gracz='".$user."'") or die (mysql_error());
  5. $czas_wczesniej = $czas_teraz - 60;
  6. $q1 = mysql_query("SELECT gracz FROM dragonball_gracze WHERE zalogowany>='".$czas_wczesniej."'") or die (mysql_error());
  7. $_SESSION['zalogowanych'] = mysql_num_rows($q1);
  8. $_SESSION['zalogowany'] = $czas_teraz;
  9. }


Ale nie miałem szansy tego przetestować na dużą skale, (ten kod trzeba dać do każdego pliku).

Ten post edytował Giluś 1.07.2012, 11:47:50
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.12.2025 - 14:44