[ stefki @ 19.04.2014. 17:03 ] @
Kako da napravim zastitu da user se ne moze logirati duplo ( dvaputa ili triputa na razlicnim browsera ili racunara ).

Znaci da se veze za cookies ili neki id u bazu.

Ako ima neka skripta gotova za ovo.

Pozdrav
[ miloskec @ 19.04.2014. 19:34 ] @
Nakon logovanja korisnika u npr. bazi flaguj ga na 1. Nakon odjave vrati polje na nulu. Prilikom logina proveravaj ovo polje i dozvoli login samo na 0.
Vodi računa o tome da useri moraju da se izloguju nakon logina kako se nebi nakon isteka sesije desilo da "zakljulčaš" usera (ovaj deo razradi - sesije, cron ili kako već ti je lakše...).
Postoji fora da preko IP adresa radiš proveru i da skladištiš user-agenta ali i to ima svoje mane. Ovo iznad ti je sigurnije rešenje.

[ dusans @ 19.04.2014. 19:38 ] @
Promeni arhitekturu i dozvoli dupli login.
[ stefki @ 19.04.2014. 20:05 ] @
miloskec: Da tako i ja mislim, samo ako ima neki example code kako da sredim to :)

[ VladaSu @ 28.04.2014. 11:39 ] @
Zaboravi da ti skripta zavisi da user mora da se izloguje. Moze da pukne veza, istekne sesija, iskljuci racunar itd.
Pravi neki string od md5(browsera + nesto random) koji ces da vezes za usera svaki put kada se uloguje i to stavi u cookie.
To random pamti u bazi i tako ce ti samo poslednji login biti validan.
Kada radis proveru pogledas korisnikov browser, pa to random u bazi pa napravis md5 i uporedis sa cookie.

Vezati se za ip adrese ti nista ne znaci jer moze imati iste ip adrese jer moze biti na istom racunaru ili u lokalnoj mrezi.
Takodje postoje provajderi koji jako cesto menjaju korisniku ip adresu, prilikom svakog requesta.

Ovaj nacin nije siguran. Moze u lokalnoj mrezi imati dva racunara sa istim browserom.

Drugi nacin je:
1. Prilikom requesta saljes random string i stavljas u cookie a taj random pamtis u cache, bazu, sesiju
3. Prilikom narednog requesta proveravas sta je prethdno poslato i uporedjujes sta je sacuvano i odmah jos u ovom requestu ides opet korak 1 i tako u krug.
[ miloskec @ 28.04.2014. 13:12 ] @
Citat:
VladaSu: Zaboravi da ti skripta zavisi da user mora da se izloguje. Moze da pukne veza, istekne sesija, iskljuci racunar itd.

Kao što rekoh : "Vodi računa o tome da useri moraju da se izloguju nakon logina kako se nebi nakon isteka sesije desilo da "zakljulčaš" usera (ovaj deo razradi - sesije, cron ili kako već ti je lakše...)."
Citat:
Pravi neki string od md5(browsera + nesto random) koji ces da vezes za usera svaki put kada se uloguje i to stavi u cookie.
To random pamti u bazi i tako ce ti samo poslednji login biti validan.
Kada radis proveru pogledas korisnikov browser, pa to random u bazi pa napravis md5 i uporedis sa cookie.

Šta ako pukne veza, istekne sesija a zapis MD5 stoji još uvek u bazi, a user ispraznio keš i nema kolačića sa stringom za proveru?

Ono što sam ti predložio je ok samo razradi proveru sesija i cron skriptu koja će ako sesija nije aktivna duže od nekog vremena da setuje polje na 0.

[ VladaSu @ 28.04.2014. 14:51 ] @
Kako ces naterati 100.000 usera da se izloguju svaki put? Neces 10 korisnika nauciti da svaki put klikne logout :)
Ja sam zadnji put kliknuo logout 2004 godine kada sam bio na moru u internet kafeu.

Na koje vreme ce cronjob da proverava da li je user aktivan ili ne? Recimo na pola sata?
Dodjem na sajt, iskljucim browser slucajno, pokusam ponovo da udjem i mogu da se pozdravim da cu se ulogovati narednih pola sata. Pisem email tehnickoj podrsci.
Da je 5 minuta onda ce dok odem da pisam, procitam neku vest, javim se na telefon ili nesto slicno sajt ce da me izloguje i naravno posle nekog vremena ce da mi dosadi da moram da budem aktivan 5 minutai pronacicu alternativu. A necu da napomenem da ce da mi se desi problem isti kao i sa problemom navedenim da je cron na pola sata. Opet pisem email tehnickoj podrsci.

Ako sajt ima 100.000 korisnika garantujem dnevno 10.000 emalova tehnickoj podrsci sa istim problemom.
Smanjivanjem razmaka izmedju cronova dobijas manje problema sa jedne strane ali stvaras vise sa druge strane.
Ako povecavas razmak cronova onda opet prebacujes kolicinu problema sa jedne na drugu stranu.
Sajt unapred osudjen na propast.

Citat:
miloskec: Šta ako pukne veza, istekne sesija a zapis MD5 stoji još uvek u bazi, a user ispraznio keš i nema kolačića sa stringom za proveru?

Ne vidim sta je tu problem? MD5 nije isti i mora ponovo da se loguje a u druga dva slucaja sto se naveo morao bi ponovo da se loguje i na bilo kojem drugom sajtu.

1. Pukla veza. - Kao i sa svim sajtovima cim se uspostavi veza sasvim normalno nastavis da radis. Kod tvog resenja verovatno ce i sesija da pukne pa nece moci da se uloguje neko vreme.
2. Istekne sesija - Nemam sesiju a i da se napravi preko sesije kao i na svim drugim sajtovima ponovo se logujes. Kod tvog resenja je problem sto nece moci da se loguje dok cron ne odradi posao.
3. Izbrises cookie - Kao i sa svim sajtovima kada izbrises cooke - ponovo se logujes. I opet kod tvog resenja je problem sto opet neces moci da se logujes dok cron ne odradi posao.
[ VladaSu @ 28.04.2014. 14:58 ] @
Najbolje je da pri svakom requstu generises neki random string i to stavljas u cooke.
Korisnik ce u najgorem slucaju preneti cooke na drugi racunar ali ce to znaciti da se na prvom izlogovao.
[ miloskec @ 28.04.2014. 15:24 ] @
Sve što si naveo jesu mane provere putem cron-a.
Moguće je da sam prevideo neki korak u tvom algoritmu.

Citat:
Pravi neki string od md5(browsera + nesto random) koji ces da vezes za usera svaki put kada se uloguje i to stavi u cookie.
To random pamti u bazi i tako ce ti samo poslednji login biti validan.
Kada radis proveru pogledas korisnikov browser, pa to random u bazi pa napravis md5 i uporedis sa cookie.


Šta je to što jednoznačno identifikuje usera?
Ako postoji zapis u bazi a ne postoji kolačić da li to usera kvalifikuje da može da se uloguje?
Ako je tako onda svaki novi useragent bez kolačića će moći da se loguje. Što bi značilo da prethodni ispada iz igre jer se na login kreira novi kolačić i zapis u bazi (naravno ako se proverava za svaki request, ako ne onda bi oba usera bila aktivna i ništa nismo dobili).

Mislim da je poenta da kada se jednom uloguje sa jednog browsera da ne može da se loguje dok user ne izađe sa sajta na ovaj ili onaj način...



[ VladaSu @ 28.04.2014. 15:41 ] @
Sta jednoznacno identifikuje usera? Taj random sting ili recimo md5 od user_id i timestamp. Vise nego dovoljno i neponovljivo.
Ako ne postoji cookie ili je los tj pogresan, automatski ga stavlja na loginu stranu. Ako se vrati u drugi browsera nastavlja sa radom.
Ako se tu ulogovao to znaci da vise ne sedi za drugim racunarom i ne radi u drugom browseru i tamo ce biti izlogovan.
Nije moguce da bude dva ili vise puta istovremeno ulogovan sto je i poenta.

Cak i ako kopira cookie iz jednog browsera u drugi on sa onim mojim predlogom da pri svakom requestu menja cookie nece moci biti logovan u dva browsera.
U tvoj slucaju sa session moguce je kopiranjem cookia (ili sadrzaja) raditi istovremeno u oba browsera.

[ miloskec @ 28.04.2014. 16:01 ] @
Na tvoj način user može da izleti sa sajta.
Nisam tako shvatio pitanje niti da to želi...
Ostalo sve može da se dotera i na njemu je.
[ agvozden @ 29.04.2014. 07:08 ] @
mozda bi objasnjenje bilo bolje kada bi rekao zbog cega ne zelis da se visestruko prijavljuju na sistem?
u doba smart telefona i tv-a, nije dobro ogranicavati takve stvari, osim kada se direktno crpu neki resursi.