Šta je novo?

PHP MySql spreciti logovanje pod istim usernameom

dj13

Čuven
Učlanjen(a)
30.01.2002
Poruke
821
Poena
665
Spreciti logovanje vise usera pod istim usernamom u istom trenutku. Korisnik se loguje. Prilikom logovanja mogu da napravim jedan update baze da je korisnik trenutno prisutan, i tako da sprecim drugo logovanje pod istim usernamom. Kad se korisnik odloguje opet update baze da se korisnik odlogovao pa je slobodno za ponovno logovanje. Problem je sledeci kako resiti ako korisnik samo zatvori browser , tj ne odloguje se, a samim tim u bazi ostaje podatak da je ulogovan. Na netu sam nasao nekoliko varijanti ali nijedna nije bas zadovoljavajuca, a neke su i dosta komplikovane. Ja sam smislio prostu varijantu sa microtime i sesijom koja ima 3 nedostatka: 1) ustvari ne sprecava drugog usera da se loguje pod istim usernamom, nego odloguje prvog, tj. prethodnog. i tako mogu u krug da se loguju i izbacuju jedan drugog :) 2)prilikom svake aktivnosti usera radi se update baze(sto i nije strasno) 3) mislim da u nekoj ludoj teoriji ako se loguju u istoj milisekundi bice oboje logovani
Postoji li neko fino resenje koje radi a da je u php mysql?
poz
 
Malo sam slabiji sa PHP MySQL-om, ali iz nekog programerskog iskustva ja bih ubacio u bazu jos neku pomocnu promenljivu koja bi se menjala u trenutku logovanja na recimo 1, a kad je korisnik izlogovan bila bi 0. Mislim da na ovaj nacin ne bi nikako mogli da se uloguju u istom trenutku jer bi se pre logovanja proveravala promenljiva i u istom trenutku bi se ona promenila, ako je dozvoljeno.

Opet napominjem da slabije stojim sa PHP MySQL-om, ali mi se ovo resenje cini dovoljno jednostavno i dobro (posmatrano iz programerskog ugla).
 
Malo sam slabiji sa PHP MySQL-om, ali iz nekog programerskog iskustva ja bih ubacio u bazu jos neku pomocnu promenljivu koja bi se menjala u trenutku logovanja na recimo 1, a kad je korisnik izlogovan bila bi 0. Mislim da na ovaj nacin ne bi nikako mogli da se uloguju u istom trenutku jer bi se pre logovanja proveravala promenljiva i u istom trenutku bi se ona promenila, ako je dozvoljeno.

Opet napominjem da slabije stojim sa PHP MySQL-om, ali mi se ovo resenje cini dovoljno jednostavno i dobro (posmatrano iz programerskog ugla).
Jesto to ok, i tako moze da radi, sto sam i napravio. Ali nema ko da upise tu 0 ako korisnik ugasi browser. Ako se izloguje kao sto sam i napisao nije problem.
 
A da kod korisnika kod log-ona i logof-a stavis neki update u bazu podataka. Takodjee da prilikom posjete na svakoj stranici pratis "aktivnost" korisnika kroz neki "timestamp" field, da vidis da li je korisnik "aktivan" ili je mozda ugasio browser.

Sada, ako se drugi korisnik pokusa logovati na isti nalog, a prethodni korisnik se nije isao na logoff, provjeri se vrijeme zadnje aktivnosti prethodnog korisnika, i ako je vise od n.p. 15min, skripta automatski logoff-uje prethodni nalog.

Ili da imas shulder koji ce logoffovati sve korisnike koji nisu nista radili u nekom vremenu. Ili da imas nesto kao "aplication variablu" na serveru, koja je zajednicka za sve sesije, pa da odradis preko nje. (shudler i aplication var. ima u ColdFusion, sa PHP nisam nesto radio, pa ne znam kako to izvesti....)

Pozdrav!
 
A da kod korisnika kod log-ona i logof-a stavis neki update u bazu podataka. Takodjee da prilikom posjete na svakoj stranici pratis "aktivnost" korisnika kroz neki "timestamp" field, da vidis da li je korisnik "aktivan" ili je mozda ugasio browser.

Sada, ako se drugi korisnik pokusa logovati na isti nalog, a prethodni korisnik se nije isao na logoff, provjeri se vrijeme zadnje aktivnosti prethodnog korisnika, i ako je vise od n.p. 15min, skripta automatski logoff-uje prethodni nalog.

Ili da imas shulder koji ce logoffovati sve korisnike koji nisu nista radili u nekom vremenu. Ili da imas nesto kao "aplication variablu" na serveru, koja je zajednicka za sve sesije, pa da odradis preko nje. (shudler i aplication var. ima u ColdFusion, sa PHP nisam nesto radio, pa ne znam kako to izvesti....)

Pozdrav!
Da. Ima takvih primera sa timestampom. Tu je problem vremenske distance. Ako neko iskljuci browser, nece se moci opet logovati narednih X minuta koje se postave za automatsko odlogivanje. Postoji na unix serverima cron jobs (verovatno slicno shudleru koji si spomenuo - pokretanje nekih scriptova u odredjeno vreme), pa bi se tu moglo nesto izmuljati, ali mi je ta oblast nepoznata.
Nesto me zanima moze li se na ovom forumu logovati vise usera pod isti username? Ako nemoze mogao bi se pogledati malo kod vBulletin-a.
poz
 
Možeš da korišćenjem AJAXa napraviš da stranica u browseru obaveštava server da je otvorena, recimo svakih 30 sekundi, pa čim se jednom ne javi da računaš da se korisnik izlogovao.
 
Možeš da korišćenjem AJAXa napraviš da stranica u browseru obaveštava server da je otvorena, recimo svakih 30 sekundi, pa čim se jednom ne javi da računaš da se korisnik izlogovao.
To je izgleda prava stvar. Ima li negde neki tutorial za nesto slicno? Ne zvuci komplikovano.
 
Poslednja izmena:
Mogao bi se resiti problem sa 'vremenskom distancom', ako bi se recimo kod svakog logovanja korisnika (ili za svako pozivanje nove stranice) pozvala funkcija, koja ce uraditi update baze, znaci, ako je korisnik vec bio ulogovan, pa recimo greskom zatvorio browser, da se za njegovo ime resetuje timestamp, a da se svi drugi isproveravaju, i ako je potrebno obrisu. Nije najelegantnije, ali iskoriscava vec dostupne resurse, bez AJAXa...
 
Nazad
Vrh Dno