Logowanie - jak sprawdzić czy jest dostępny? |
Autor |
Wiadomość |
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 14-03-2010, 17:46 Logowanie - jak sprawdzić czy jest dostępny?
|
|
|
Witam! Mam pytanie jak radzicie sprawdzać czy user jest zalogowany (skrypt na sejsach + mysql)?
Czy zrobić tabele Kod: | timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, | i jako aktywnego dawać tego kto ma tą datę mniejszą od aktualnej o np. 5 min? Czy może macie jakiś inny pomysł?
Bo robienie przy logowaniu wpisu do tabelki online jest wg. mnie bez sensu z prostego powodu - nie każdy korzysta z wylogowania, niektórzy po prostu wyłączają przeglądarkę. Chyba że można jakoś do tego zmusić usera? |
|
|
|
 |
Gadatliwa Kasia
|
|
|
|
kevin_

Pomógł: 768 razy Posty: 2680
|
Wysłany: 14-03-2010, 17:50
|
|
|
maniek.a napisał/a: | Bo robienie przy logowaniu wpisu do tabelki online jest wg. mnie bez sensu z prostego powodu - nie każdy korzysta z wylogowania, niektórzy po prostu wyłączają przeglądarkę. Chyba że można jakoś do tego zmusić usera? |
Źle rozumujesz działanie takiego mechanizmu, bądź ja kiedyś źle doczytałem.
Otóż też uważałem jak Ty - co z gościem, który NIE WYLOGUJE SIĘ, przecież będzie on Online 24/h :F - NIE.
Użytkownik się loguje do serwisu, do tabeli "Online" jest dodawany rekord (+data kiedy się zalogowałi) - pamiętaj mamy to w bazie.
Przychodzi drugi użytkownik do serwisu, a ten pierwszy poszedł sobie i nie wylogował się. Cały czas jest wpis w bazie i teraz dopisujesz kolejny warunek coś w stylu:
> loguje się 2 użytkownik i od razu sprawdzasz (drugie zapytanie) wpisy gdzie data ostatniej aktywności przekroczyła X czasu. I wtedy gościa usuwamy z tabeli USERS_ONLINE i mamy tylko jednego online.
Rozumiesz?
UPDATE:
Zjadłem drugą cześć działania mechanizmu. :FFF
Oczywiście jeżeli czas ostatniej wizyty jest OK (czyli jest mniejszy (?) niż te X minut) to wtedy dajemy mu
+5 kolejnych minut i tak w kółko :F |
_________________ Prezes |
|
|
|
 |
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 14-03-2010, 18:03
|
|
|
Czyli tak: Robię tabelkę online z polami: id, data_ostatnie aktywnosci(timestamp) i idusera. Potem przy logowaniu dodaje rekord i za każdym razem gdy coś ważniejszego klika dodaje rekord do tej tabelki. Zaraz po tym jak drugi user zrobi coś to wysyłany jest jego rekord i przy okazji sprawdzane inne rekordy?
Martwi mnie tylko ilość zapytań -Dodanie,-Sprawdzenie,-usunięcie.
Wolałbym zrobić plik php który sam co 5 minut będzie sprawdzał i wywalał starsze niż 5 minut rekordy. Tylko jak? |
|
|
|
 |
kevin_

Pomógł: 768 razy Posty: 2680
|
Wysłany: 14-03-2010, 18:09
|
|
|
maniek.a napisał/a: | Czyli tak: Robię tabelkę online z polami: id, data_ostatnie aktywnosci(timestamp) i idusera. |
Tak. Możesz też zrobić coś jak jest w phpBB2, że będziesz mógł stworzyć konto "Gość", ale to już nieobowiązkowy proces.
maniek.a napisał/a: | . Potem przy logowaniu dodaje rekord i za każdym razem gdy coś ważniejszego klika dodaje rekord do tej tabelki. |
Nie zrozumiałem tekstu od "i za każdym razem ..."
Co do reszty postu: TAK.
Zresztą podejrzyj sobie np. plik z phpbb ./includes/sessions.php |
_________________ Prezes |
|
|
|
 |
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 14-03-2010, 18:29
|
|
|
Chodziło mi o to żę przy każdej aktywności "odświeżam" mu datę.
Co do pliku z phpbb - mało z tego rozumiem
Kurde muszę jakoś ten pliczek sobie zrobić mógłby ktoś pomóc (jak zrobić żeby sam się uruchamiał) |
|
|
|
 |
kevin_

Pomógł: 768 razy Posty: 2680
|
Wysłany: 14-03-2010, 19:41
|
|
|
maniek.a napisał/a: | Kurde muszę jakoś ten pliczek sobie zrobić mógłby ktoś pomóc (jak zrobić żeby sam się uruchamiał) |
Jeżeli masz strukturę plików podobną do phpBB czyli header.php & footer.php to po prostu w header.php daj to całe sprawdzanie. Jeżeli HEADER.php dołączasz do każdego pliku (strony) to nie widzę problemów. |
_________________ Prezes |
|
|
|
 |
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 14-03-2010, 22:00
|
|
|
I co tam dać sprawdzanie czasu i jak będzie to godzina podzielna przez 5 minut to zapytanie?
Chyba bym nie umiał takiego czegoś zrobić.
Wole chyba zainwestować w hosting z cronem i mieć spokój |
|
|
|
 |
Krabny
Posty: 2
|
Wysłany: 15-03-2010, 11:40
|
|
|
maniek.a napisał/a: | Bo robienie przy logowaniu wpisu do tabelki online jest wg. mnie bez sensu z prostego powodu - nie każdy korzysta z wylogowania, niektórzy po prostu wyłączają przeglądarkę. Chyba że można jakoś do tego zmusić usera? |
To po prostu wysyłaj cookie o określonym czasie trwania sesjii i potem to sprawdzaj . W czym problem ? |
|
|
|
 |
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 15-03-2010, 17:53
|
|
|
A cookie są na serwerze czy u usera w przeglądarce? ...
No właśnie.
Dzisiaj jadąc sobie tramwajem wpadłem na super pomysł.
W tabeli user - pole o jakim pisałem w 1 poście.
I później przy profilu -
Kod: | $data=date('j.n.y, H:i');
$dataa = $pobranazsql['data'];
if( $data-$dataa > 00.00.00, 00:05)
{
echo'offline';
}else{echo 'online';} |
Ograniczona liczba zapytań i w ogóle prostota budowy . Teraz tylko jakoś kod napiszę (bo tak pewnie nie będzie działało) i gotowe .
Myślę jeszcze o zrobieniu tabeli aktywnosc - ale to tak tylko jak mi się będzie nudziło |
|
|
|
 |
maminowiec

Pomógł: 551 razy Posty: 1729
|
Wysłany: 15-03-2010, 18:54
|
|
|
i tak musisz pobrać tą wartość daty. Więc zapytanie i tak będzie |
_________________
Ebooki do pobrania |
|
|
|
 |
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 15-03-2010, 20:03
|
|
|
@maminowiec: Tak ale policz je, - wchodzisz w profil usera - select * from user where id=xxx - mam jedno zapytanie do wszystkiego, w drugiej możliwości 2 - dane + online. Teraz druga opcja - np. oglądanie "rankingu" - mój wybór- 1 jedna zapytanie które ściąga wszystkie dane, drugi wybór - 1 zapytanie które ściąga nicki/id/inne_dyrdymały i pętla do wykonania tylu zapytań ile jest userów w rankingu do ściągnięciu dostępności.(Ewentualnie 2 , ale wtedy pewnie bym się pogubił w kodzie do wyświetlania)
Powiedzmy 100 userów:
1. opcja: 1 zapytaine
2. opcja: 101 zapytań
To jest główny powód mojego wyboru. |
|
|
|
 |
CyberDuck [Usunięty]
|
Wysłany: 15-03-2010, 22:39
|
|
|
Ja zrobilem to nieco inaczej chociaz sam mechanizm jest bardzo podobny.
Do tabeli zalogowany czy tez szpieg i jak kto woli Masz id, time() zalogowania, oraz
mozesz nawet dodac podstrona pod warunkiem, ze na kazdej podstronie przed
header w ktorym bedzie umieszczony skrypt obslugujacy te tabele umiescisz
w jakiejs stalej zmiennej nazwe podstrony, ktora wywoluje uzytkownik.
Teraz w header, ktore jest ladowane na kazdej podstronie :
1. Sprawdzasz czy jest w tej tabeli wpis tyczacy sie danego usera (id).
Moze to tez byc uzytkownik niezalogowany wiec lepiej jesli rozpoznawanie
zrobisz np na podstawie IP uzytkownika, ale jesli ktos wejdzie z tej samej sieci, ale
na dwoch roznych komputerach to bedzie bida. Wiec najlepiej jesli przy pierwszym
wejsciu na stronie do zmiennej sesji sobie wpiszesz jakies niepowtarzalne ID i na
jego podstawie bedziesz identyfikowac uzytkownika.
Przyjmij sobie, ze dajmy na to miedzy kliknieciami moze uplynac max 3 min czyli 180 sek.
a. Tak wiec jesli jest dany user w tabeli to tylko odswierzasz wpis w tabeli z nowym
czasem i podstrona, ktora aktualnie oglada.
b. Jesli go juz nie ma to dodajesz nowy wpis do bazy.
2. Wszystkie przedawnione wpisy czyli takie od ktorych juz uplynelo 180 sekund
kasujesz jednym wpisem z tabeli. Czyli wszystkie takie ktore sa mniejsze niz time() - 180.
Teraz podstrona z wyswietlaniem juz ludkow jest prosta i moze wygladac np tak :
Wszystko robisz max przy pomocy 2 zapytan. Jedno ewentualnie dla wznowienia wpisu i drugie dla
skasowania przedawnionych wpisow. Zalogowanych i niezalogowanych uzytkownikow mozesz
rozroznic polem w tabeli. |
|
|
|
 |
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 16-03-2010, 18:16
|
|
|
Trochę to skomplikowane - zrobię tak ale najpierw się zajmę resztą |
|
|
|
 |
CyberDuck [Usunięty]
|
Wysłany: 16-03-2010, 18:42
|
|
|
E tam skomplikowane.
Dokladniej robisz to tak :
1. UPDATE sprawdzenie czy dany wpis z id_sesji jest w bazie, albo mozesz
od razu sprobowac zrobic update bazy. Jesli wpis jeszcze istnial to zostanie zapisany
z nowymi czasami i danymi. Jesli nie to i tak sie nic nie stanie.
Sprawdzeniem operacji na bazie mozesz od razu sprawdzac czy operacja zostala
wykonana poprawnie na bazie. Wynik daje Ci w tym momencie obraz czy
uzytkownik istnieje juz w bazie czy jeszcze nie i dalej w zaleznosci od wyniku
podejmujesz dalej odpowiednie reakcje.
2. INSERT INTO Jesli nie bylo wpisu to robisz nowy wpis.
3. DELETE FROM . WHERE time() - 180 > dana_z_tabeli Kasowanie wszystkich. |
|
|
|
 |
Gadatliwa Kasia
|
|
|
|
maniek.a

Pomógł: 14 razy Posty: 303
|
Wysłany: 16-03-2010, 20:21
|
|
|
Czyli po mojemu:
Każde logowanie ma swoje id sesji, przy każdym działaniu - update do bazy, przy logowaniu - nowy wpis.
Do np. panelu admina po zalogowaniu się automatycznie usuwam starsze rekordy niż 180s.
Jeśli dobrze zrozumiałem to to nie jest głupie .
Tylko czy nie lepiej zamiast id_sesji dać po prostu id_usera?
Tak przy okazji - jak w headerze sprawdzić jaka jest odpalona podstrona? |
|
|
|
 |
|