phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

FAQFAQ - PIERWSZA POMOC!!  regulaminREGULAMIN  SzukajSZUKAJ  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload  katalog Forów DyskusyjnychKatalog Forów   FAQ Video tutoriale

Poprzedni temat «» Następny temat
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 :mrgreen:
 
     
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 :mrgreen:
 
     
maniek.a


Pomógł: 14 razy
Posty: 303
Wysłany: 14-03-2010, 18:29   

Cytat:
i za każdym razem
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 :mrgreen:
 
     
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 8) .


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?
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Kopiowanie wszelkich treści zawartych na forum, modyfikacji oraz instrukcji bez zgody administracji i autorów tematów/postów zabronione!

Powered by phpBB modified by Przemo © 2003 phpBB
Strona wygenerowana w 0,11 sekundy. Zapytań do SQL: 12
Polecane serwisy

Najlepsze oprogramowanie do prowadzenia sklepu internetowegoNajlepszy program do sklepu firmowany przez Przem'a

Sklep z gadżetami

Design Cart - Tworzenie sklepu internetowego

iRonin.IT

https://nabea.pl

• Zamów reklamę