![]() |
PHP onemogućavanje istovremenog logiranja više korisnika sa istim username i pass
Imam potrebu za PHP skriptom s kojom je moguće onemogućiti istovremeno logiranje više korisnika sa istim usernameom i passwordom. Znači, ako Pero ima svaoj username i odgovarajući password i ako je to rekao svom frendu Juri, da se Jure ne može ulogirati s tim istim usernameom dok je god Pero logiran. Znači cilj je da i Jure napravi svoj account i da se onda sa svojim accauntom logira, a ne da koristi podatke od frenda. :-)
Tražio sam po netu i po hotscripts.com itd. i tko zna gdje sve nisam tražio odgovarajuću skriptu, ali nisam našao. Probao sam sa phpSecurePages ali nisam uspio. Znam da bi trebao konfigurirati sessione i povezanost njihovu sa MySQL-om, ali nisam toliko još dobar u php-u da bi to mogao sve sam programirati. Zna li netko kakvu gotovu skriptu koju mi može preporučiti ili ponuditi kakvu drugu pomoć? Jednostavnih rješenjea tipa tutorial (click, click i gotovo...) znam da nema za ovo pa ni ne pitam:D. tnx! EDIT. Sory, zaboravio sam napomenuti. poznati naš horza mi je ponudio pomoć u ovom projektu, ali kako je nismo realizirali kada smo o tome pričali prije ljeta, sada mi je malo nezgodno ga tlačiti kada su prošla 2-3 mjeseca. Ukoliko je i dalje zainteresiran, hvala, jedva čekam. Naravno i svi drugi su dobrodošli sa svojim pametnim savjetima i pomoći. |
Kad se Pero logira promijeniš mu status logiran (u tabeli korisnici, baza) u 1. Pri svakom loginu provjeravaš da li je taj user koji se logira već ulogiran (preko logiran statusa). Jel znaš to isprogramirati?
|
Respekt na brzini!
Hvala! Čini mi se da imaš dobru ideju. Sigurno bi svakako trebalo programirati i to da oznaka "1" ne traje dok god čovjek ne napravi logout već da ima vremnsko trajanje i da provjerava s cookisima svakih x minuta. Da se ne desi da se čovjeku sruši browser (ili ne daj bože komp:D) pa da se ne može više ulogirati. To na žalost ne znam isprogramoirati. |
Da, moj algoritam ima taj (velik) nedostatak.
Ali sljedeći zato nema te se takav koristi u ovim i sličnim slučajevima. U bazi imaš tabelu logirani sa poljima: korisnik_id INT | zadnja_izmjena INT Ako je korisnik logiran, pri svakoj izmjeni stranice updateaš zadnja_izmjena s time(). To ćeš učiniti tako što na vrh svake stranice staviš funkciju koja to radi. Kada dođe Jure i hoće se ulogirati, tvoj sistem provjerava da li u tabeli logirani postoji unos čiji je korisnik_id Perin (recimo da je njegov id 5, dakle provjeravaš da li postoji unos where korisnik_id=5), ali, moraš također provjeriti da li je vrijednost zadnja_izmjena viša od vrijednosti time() - razdoblje_neosvježavanja (kojeg ti sebi definiraš, to je najčešće 5 ili 10 minuta, dakle: 60*10). Ako su obadva uvjeta točna, znači da je Pero ulogiran, a ako je jedan od ta dva uvjeta netočan, znači da nije. Po tome dalje postupaš s Jurom. Evo ti i query za to: Citiraj:
** $time prije u php kodu definiraš: $time = time() - 60*10; -> naravno, query ide bez zvjezdica Ako dobiješ rezultat, Pero je ulogiran, ako ne - nije. |
frANZi, legendo, fala na trudu i detaljnosti.
Tvoj algoritam nije imao nikakav (veliki) nedostatak već je bio dobra ideja. Ja sam napomenuo da bi vjerojatno trebalo dodati još neke stvari, jer sam o ovom problemu postao već prije i dosta razmišljao i tražio rješenje po netu. Nije to moje programersko znanje, već sam dosta toga dobio savjete od drugih, a i nešto sam i sam malo logički domislio:D. Ovo što si sada napisao mi se logički čini vrlo odlično :-), jedino je stvar u tome što ja to ne znam pretvoriti u točan php code jer sam u php-u na početku. Čini mi se da ti barataš time vrlo dobro, a ja sam daleko od toga u kontekstu php-a. Hvala! Btw, u međuvremenu probao sam i trial skripte Omni-secure ali nisam uspio s njom ovo što bi meni trebalo. Mislim da nema te mogućnosti. Uf.. |
Imaš li već napravljen sustav za login korisnika? Taj bi ti sustav u svakom slučaju trebao napraviti sesiju koja sadrži podatke o trenutno ulogiranom korisniku. Ja ću pretpostaviti da id trenutno ulogiranog korisnika držiš u $_SESSION['user'].
Ovo je funkcija koja updatea logirani tabelu: ------------- function logiraniUpdate() { if ($_SESSION['user']) { // tabela se updatea samo ako je posjetitelj ulogiran $checkq = "SELECT korisnik_id FROM logirani WHERE korisnik_id = ".$_SESSION['user']; // provjera da li postoji zapis u bazi o ulogiranom posjetitelju $check = mysql_query($checkq) or die(mysql_error()); if (mysql_num_rows($check) > 0) { // ako postoji... $query = "UPDATE logirani SET zadnja_izmjena = '".time()."' WHERE korisnik_id = ".$_SESSION['user']; // ...napravi update $result = mysql_query($query) or die(mysql_error()); } else { // a ako ne postoji... $query = "INSERT INTO logirani VALUES ('".$_SESSION['user']."', '".time()."')"; // ...dodaj ga $result = mysql_query($query) or die(mysql_error()); } } } ?> ------------- Na vrhu svake stranice je pozoveš s logiraniUpdate;, s tim da funkciju moraš naravno includati (ako je staviš u odvojeni fajl). Pri loginu ovako provjeravaš da li je korisnik u čiji se account trenutni posjetitelj logira već logiran (znači da li je Pero logiran a Jure je taj koji se hoće logirati u njegov account). Ovdje je vrlo bitno da imaš id ovoga koji se želi ulogirati. Dakle, prvo provjeriš da li je dobro ukucao username i password, ako je, uzmeš njegov id iz baze i spremiš ga u varijablu $privremeni_id (primjerice). ------------- $time = time() - 60*10; $query = "SELECT korisnik_id FROM logirani WHERE korisnik_id = '".$privremeni_id."' AND zadnja_izmjena > '".$time."'"; // ovo je onaj query iz prvog posta $result = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($result) > 0) { // ako postoji ulogiran već exit; // prekini (prekidanje ne mora biti ovakvo) } else { // ako ne postoji $_SESSION['user'] = $privremeni_id; // ulogiraj ga } ------------- Kod je podložan sintaksnim pogreškama, nisam ga testirao. Možda će ga trebati još malo prilagoditi, ali to je u principu to. Usput, uputio bih te na forum koji se bavi ovom tematikom: forum.webmajstori.net (valjda mi neće zamjeriti moderatori) |
Franzi, hvala ti na pomoći.
Inače, sustav za login korisnika odabrao sam phpSecurePages . Za sada mi se čini vrlo dobar. radi mi u povezanosti s bazom i za sada je ok. Jedino bih htio njega sada nadograditi da mi funkcionira ovo što mi treba. Još nije to ništa objavljeno nego sve pokušavam prvo lokalno dobro iskonfigurirati i istestirati. Mislim, rado bi ja i neko gotovo rješenje bez da moram phpSecurePages modificirati, ali ne uspijevam pronaći.:D Ne znam kako da uspješno iskonfiguriram php da mi piše u bazu i stvara cookie koji bi mi trebali za to. Sad studiram ovaj tvoj kod što si mi pastao ovdje pa ću javit što sam uspio. Mnogo fala na kodu. |
Uf, probao sam s ovime, ali očito ja nešto ne napravim dobro. Ne vidim nigdje u bazio da su unesene varijable korisnik_id i logirani. Valjda nisam dobro napravio bazu za ovo. Kako da ispravno konfiguriram ta polja. PhpSecurePages mi dobro funkcionira no ja sam statički unio podatke u polja koja njemu trebaju a on php escure radi PHPSESSION cookies. Ne uspijevam skužiti kako ovo ispravno uklopiti.
Inače, razmišljao sam o ovoj provjeri logina i onemogućavanju dvostrukog logina. Mislim da bi najbolje bilo kada bi noviji login izbacio onog vremenski straijeg i time bi rješio problem zatvaranja browsera bez logouta i problem da vremenski mora provjeravati skripta. Mislim da bi to moglo biti jednostavnije i efikasno. Šta kažete? |
Sva vremena su GMT +2. Sada je 08:56. |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger