Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Brisanje cookie pri logout

[es] :: PHP :: Brisanje cookie pri logout

Strane: 1 2

[ Pregleda: 4646 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Insider_m
Web developer

Član broj: 290688
Poruke: 98
77.28.196.*



+7 Profil

icon Brisanje cookie pri logout29.09.2011. u 12:23 - pre 153 meseci
Pri logiranje, koristim cookie koje sodrzi vrednoste username i password

Code:
set_cookie(user, $usercheck, $time);
         set_cookie(pass, md5($passcheck), $time);


$time moze da ima vrednost 0 (pri zatvaranja browsera ili neko drugo vreme, sada za test mi e 1 dan ili 24*60*60)

u formu imam checkbox Remember me, koje setira $tim. ako je selektirano $time = 1den, ako nije = 0

ako veke postoi cookie pravil sljednu proverku:

Code:
if(isset($_COOKIE['uname']) && isset($_COOKIE['upwd'])) {
        if($_COOKIE['uname'] != '' && $_COOKIE['upwd'] != '') {
              $sql = "SELECT * FROM users WHERE username = '".$_COOKIE['uname']."' AND password = '".$_COOKIE['upwd']."' LIMIT 1";
                if(count($db->get_results($sql)) > 0) {
                        $login_errors[] = 'success';
                        header("Location: profile.php");
                } else {
                        // failed
                } 
        }
} else { ... }



Moji probljem je sta kad hocu da se odlogujem, nemogu da izbrisem cookie.

za logout koristim:
Code:

set_cookie(user, '', time() - 30000000000);
set_cookie(pass, '', time() - 30000000000);


 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout29.09.2011. u 14:54 - pre 152 meseci
Stavis da ti je vrednost nista pa ce to automatski znaciti da je izlogovan.
I postavi da ti je trajanje kukija 0 pa kada ugasi browser onda ce i cookie da nestane.

Postavljenje sifre u cookie je greska. Bez obzira sto si stavio MD5.

Npr:
Code (php):

set_cookie(pass, md5('neka_sifra'), $time);
 

ce postaviti u cookie 'b2642sg4234f2edsyt554....'.
I mene bas briga koja ti je sifra jer stavim rucno u cookie ovaj string i automatski se ulogujem.

Tako da mi je svejedno da li vidim sifru ili md5 sifre.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Insider_m
Web developer

Član broj: 290688
Poruke: 98
77.28.196.*



+7 Profil

icon Re: Brisanje cookie pri logout29.09.2011. u 16:10 - pre 152 meseci
samo primer sam pisao, inaku imam md5(md5(pass)).

kad idem logout meni treba cookie da nestane, i da mogu da se ulogujem sa drugi user, a sad to nemogu.
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Brisanje cookie pri logout29.09.2011. u 16:57 - pre 152 meseci
problem ti je u ovome time() - 30000000000. ocigledno si bas bukvalno shvatio "neki datum u proslosti" :)

stavi 3600 umesto ovog 30000000000 i obrisace ti se cookie.

razlog zasto ne radi sa tako velikim brojem je sto taj broj ne staje u 32 bitni integer pa ce napraviti overflow u neki negativan broj i onda imas oduzimanje negativnog broja sto je ustvari sabiranje pa tako dobijes datum u buducnosti umesto u proslosti (ovo je sve pretpostavka, nisam testirao ali mislim da sam u pravu u vezi tog datuma u buducnosti, uostalom proveri koji expires datum se setuje za taj cooki kad pokusas da ga obrises sa nekim od alata kao sto je firebug ili developer tools)
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout29.09.2011. u 17:04 - pre 152 meseci
Mozes imati 10 puta MD5 jer ce to biti neki drugi string koji opet ukradem.
Poenta je da je to uvek isti string bilo bio to password ili md5 ili pet puta md5.
Ako nije random string ako jednom ukradem taj string onda cu uvek znati koji ce string generisati tvoj php jer uvek isti generise.
Napravicu rucno cookie sa tim stringom i ti neces znati da li sam to rucno napravio ili si ti napravio sa php.

Ako je neki random string onda ja iako jednom ukradem onda ne mogu da predvidim koji string ce biti prilikom sledeceg logovanja a u medjuvremenu
prilikom svakog ucitavanja stranice ti proveravas da li je ukraden i ako je ukraden izlogujes sve sa tom sifrom i onda ce morati ponovo da kucaju sifru a uci ce samo onaj
koji zna sifru i on ce dobiti neki novi random string. Ovaj drugi moze opet da ukrade ali koja je verovatnoca da stalno krade? I ti ces opet detektovati kradju i onda ces javiti korisniku na email da mu
neko stalno krade cookie i da to nekako resi.

A sada problem za koji si pitao.
Tebi NE treba da nestane cookie kada odes na logout. Dovoljno je izbrises vrednost pa je user izlogovan.
Ako si izlogovan i pise ti da si izlogovan i na sajtu vidis sve kao kada je izlogovan user onda ponovno logovanje NE sme da ima bilo kakve veze sa starim kukijem odnoso ti pravis novi
preko starog.

Tako da ti nije problem u tome da li postoji cookie ili ne vec je problem negde drugde u kodu.

Ti dodjes u situaciju:
Code (php):

$x = 1; //prvi korisnik
$x = ''; //logout
$x = 2;//drugi korisnik
 


A ti hoces:
Code (php):

$x = 1; //prvi korisnik
unset($x); //logout
$x = 2;//drugi korisnik
 

Kakva je razlika? U sustini je nema.

I sto kaze Aleksandar da nije dobro time() - 30000000000.
To ce da ti postavi neki datum u buducnost a ne u proslost. Meni je stavio Fri, 18 Oct 2013 08:15:04 GMT
Ali bez obzira sto istice u buducnosti tebi mora da radi dobro ako cookie postoji ali bez vrednosti ili sa pogresnom vrednoscu.

Mislim da ti ne valja provera da li je user izlogovan ili nije.






[Ovu poruku je menjao VladaSu dana 29.09.2011. u 18:21 GMT+1]
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Brisanje cookie pri logout29.09.2011. u 19:47 - pre 152 meseci
Samo da se nadovežem...

Stavljanje nekoliko md5, sh1 funkcija u nizu nema nikakvu ulogu. Bolje smisli neki slogan koji ćeš vezati za md5 funkciju npr. md5($password.$slogan);

Takođe imaj na umu da osetljive podatke (lozinke, podaci prijave, pa čak i emailove) ne treba stavljati u cookies ili na bilo koji drugi način da budu dostupni krajnjem korisniku.
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout29.09.2011. u 21:33 - pre 152 meseci
Da se nadovezem. MD5($password.$slogan); je jednako sa MD5($password);
je jednako sa MD5(MD5($password)) ... ako je slogan konstantan. Jednako u pogledu sigurnosti.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 01:22 - pre 152 meseci
Citat:
VladaSu: Da se nadovezem. MD5($password.$slogan); je jednako sa MD5($password);
je jednako sa MD5(MD5($password)) ... ako je slogan konstantan. Jednako u pogledu sigurnosti.
Apsolutno netačno.

Naravno, ovo ne važi ako lozinke smeštaš u cookies ... onda je svejedno koliko je lozinka crypt-ovana.
Ovo je daleko bolja metoda od md5:
http://www.php.net/manual/en/f...rds.php#faq.passwords.fasthash
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.dynamic.sbb.rs.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 07:20 - pre 152 meseci
Sta VladaSu hoce da kaze, i u pravu je a vecina ne kapira je da ako je sadrzaj cookie-a konstantan, to prakticno znaci da ti prodas komp nekom i on posle 5 godina sedne za kompom, nadje nekako taj cookie sa tim textom koji iako je 75 puta md5($pass) i dalje je isti posle 5 godina, i taj neko unese taj cookie rucno u browser, on je automatski instant logovan na sajt.
Pa taman da ima jos 75 puta md5 preko 185 puta md5, taj string je uvek i stalno i svaki put ideeeentican i ne menja se za isti password, i kao takav nije siguran jer iako lopov ne zna tacan password, on zna sifru za sifru, a to je taj 75x md5($pass) koji se nikada ne menja za isti pass. Jer md5(md5(md5($pass))) je uvek ISTI string, nebitno koji je to string i nebitno sto se ne moze doci do sifre, ali je isti i predstavlja validnu identifikaciju na sajtu.

Primer sa prodajom je krajnje glup ali da ne pricamo sad da korisnici koriste nekriptovane wifi mreze preko kojih je kradja cookie cesca i podjednako teska kao dobar dan. Takodje i o virusima i ostaloj gamad koja krade cookie bas ovog tipa.
Ko ne veruje neka proba, a ako bas hoce slobodno neka koristi sporni princip, kome ipak zvuci da je Vlada u pravu neka proba da, recimo, pravi drugaciji hash za svaki login (za istog usera i isti pass) i cuva ga u bazu uz korisnika do logouta ili timeouta.

 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 07:52 - pre 152 meseci
Ili ukratko: :)
Citat:
ivan.a
Naravno, ovo ne važi ako lozinke smeštaš u cookies ... onda je svejedno koliko je lozinka crypt-ovana.
Ja govorim o drugoj stvari, npr. crack-ovanje passworda što je znatno teže ako je lozinka kompleksnija (zato sam i postavio onaj link u prethodnom postu, da ne bi neki čitali između redova što očigledno ne pomaže xD...).
Ako već govoriš o smeštanju osetljivih podataka (npr. lozinke) u cookies (što se, inače, ne preporučuje) onda treba to zaštiti i vremenski, proveravati IP adresu poslednje sesije i uporediti sa korisnikovom IP adresom koji se loguje preko cookies-a itd. Uglavnom treba smisliti metode koje će znatno otežati posao "uljezima" i/ili zaštiti skriptu što je više moguće.
Ako proveravaš samo password preko cookies-a onda bolje batali web programiranje, dok se ne napravi neka šteta ... :)
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
77.243.20.*



+303 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 11:46 - pre 152 meseci
Moze neki savet onda kako odraditi "remember me" logiku kod logovanja. Sta cuvati kod korisnika da bi mogao biti prepoznat kasnije?
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 12:07 - pre 152 meseci
@ivan.a
Ovo o cemu ti pricas je cuvanje passworda u bazi (ili negde na serveru) za slucaj da neko ukrade bazu.
Nigde ne pise za slucaj na klijentu (u cookie) jer nisu ni pomislili da neko hoce da cuva password na klijentu u bilo kakvom formatu.
Sada kakvo je to kriptovanje, da li sha, md5, sa salt ili ko zna kakvo to je manje bitno jer recimo za taj "slabi" md5 trebaju meseci da se provali samo za jednog korisnika,
a tek za hiljade korisnika.... Da li je to toliko bitno da ako neko uspe da ti ukrade bazu i onda posle par meseci uspe da provali lozinku jednog korisnika?
Mozda je lakse uz pretnju pistolja pitati za lozinku :)

Pokusacu jednostavnim kodom da pokazem sta je problem ako se bilo kako cuva password na klijentu:
Code (php):

//prvi primer kada nema kriptovanja
$password = "xyz";
$cookie = $password; // sada se u cookie vidi da je lozinka xyz i onaj ko pogleda cookie znace lozinku
//ili ukrade cookie (to ukradeno nazovemo recimo moj_cookie jer sam  ovom slucaju ja lopov) i onda ti proveravas
//posaljem ti cookie sa "xyz"
$moj_cookie = "xyz";
if ($moj_cookie == $password)
{
///jeste jednako a mogu i kucanjem da udjem
}

//A evo sa kriptovanjem

$password = "xyz";
$cookie = MD5($password); // opa, tu si kriptovao i sada je u $cookie = 'd16fb36f0911f878998c136191af705e';
//eto nemam pojima da je lozinka xyz
//ali znam da u kukiju ima ovaj string d16fb36f0911f878998c136191af705e i ja cu to da ti posaljem
$moj_cookie = "d16fb36f0911f878998c136191af705e";
if ($moj_cookie == MD5($password))
{
// d16fb36f0911f878998c136191af705e je jednako sa MD5('xyz') iako ne znam da je lozinka xyz
}

 

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 12:20 - pre 152 meseci
@Milose
Remeber me bez kriptovane konekcije povecava rizik za provaljivanje ali odprilike to ovako ide:
1. Korisnik se loguje i ti ga proveris
2. Ako je logovan u tabelu (user_id, random_string, timestamp) u bazi upises neki random string i stavis da taj random string istice recimo za mesec dana
3. Posaljes cookie tom klijentu sa tim random stringom i cookie istice za mesec dana
4. Prilikom ucitavanje svake stranice dok proveravas da li je user logovan $cookie_random_string === $baza_random_string za taj user id proveris i vreme
Takodje napravis neki mehanizam provere da li je mozda cookie ukraden. NEMA sigurnog mehanizama za ovu proveru koje ce raditi sa svim korisnicima.
O mehanizmu te provere moze posebna tema :)
Najsigurnija je IP adresa ali neki provajderi u inostranstvu dostavljaju podatke korisniku preko vise proxy servera gde ti prosledjuju razlicite IP adrese
pa ce ti prilikom ucitavanja svake stranice biti kao da je ukraden cookie.


Za razliku kada nije remeber me cookie stavis da se unisti prilikom zatvaranje sesije odnosno iskljucivanja browsera.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 14:44 - pre 152 meseci
@VladaSu,
ako ti neko ukrade celu bazu podataka onda sve ovo nije ni bitno, mada sam sam govorio o drugim stvarima, ali to je već druga tema. :) Zato nije loše (koga interesuje) da pročita ovo i zašto je poželjno koristiti neki slogan sa lozinkom (poslednja stavka; nadam se da ne treba više da se vraćam na ovu temu... ).
http://en.wikipedia.org/wiki/Rainbow_table

@autor,
Vlada je lepo napisao način prijavljivanja preko cookies-a i slažem se da ta metoda nikada ne može biti 100% sigurna. Na primer odeš u internet kafe, otvoriš browser (lupam facebook sajt) i odjednom vidiš da si prijavljen na nečiji profil samo zato što je koristio "Remember me" opciju...Banalan primer ali krađe naloga su uglavnom posledica ljudske greške.

Login preko cookies-a bi mogao i ovako da izgleda:
1. Kada se korisnik prijavi sa "Remember me" opcijom generiše se cookie koji sadrži korisničko ime i neki random broj/string (token). Korisničko ime i token se upisuju kao par u bazu podataka.

2. Kada korisnik koji nije ulogovan pristupi sajtu sa "login" cookies-om, vrši se provera korisničkog imena i tokena iz baze.

- Ako se cookies slaže sa podacima iz baze korisnik je logovan. Token se uklanja iz baze podataka i generiše se novi zajedno sa korisničkim imenom koji se ponovo upisuju u bazu podatka i generiše se novi cookies.
- Ako se cookies ne slaže sa podacima iz baze cookies se ignoriše.

3. Opciono: Korisnici koji se prijave preko cookies-a ne mogu pristupiti nekim zaštićenim informacijama ili funkcijama kao npr. promena lozinke...Da bi dobio ove privilegije korisnik mora ponovo da ukuca korisničko ime i lozinku u formi (ili prilikom submitovanja forme).

-Poželjno je ograničiti trajanje cookies-a na što manji period (npr. 3-4 dana).
-Takodje nije loše praviti log fajl za sve sumnjive prijave (npr. korisnik ima login cookie, ali podaci se ne slažu sa onim iz baze podataka) i eventualno upozoriti korisnika o "invalid login".
-Koristi slogan zajedno sa nekom hash metodom za lozinke.

[Ovu poruku je menjao ivan.a dana 30.09.2011. u 15:59 GMT+1]
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 15:25 - pre 152 meseci
@ivan Ne vidim nikakvu razliku izmedju tvog i mog primera sem sto ti prepoznajes usera po user_name a ja po user_id
i sto ti u taj random ubacis user_name ali cemu to kada je to svakako neki random....

Ako ti neko ukrade bazu (recimo neki backup) on opet ne moze nista ako ne zna sifre, pa i live bazu da drpi samo ce imati neke informacije ali nece moci menjati
podatke na live serveru preko nekog korisnika sajta jer nece znati sifru. Zato se sifre kriptuju.

Salt o kojem ti pricas opet nema veze sa problemom.
Ako je salt konstantan (sto sam video cesto da stave neku php konstantu) onda je kriptovanje opet u sustini bezvredno jer kada provalis 2 "saltovane" lozinke onda ces znati koji je salt
i znaces koje su lozinke ili ako provalim lozinku koju vec znam.
Ono sto uradis sa konstantim salt je da produzis lozinku za duzinu salta i na taj nacin otezas provaljivanje jer je potreban veci broj karaktera za provaljivanje.
Salt vredi ako je neki random proracunati string. Opet dodjemo na ono o cemu sam pricao da je bitno da nije konstanta.

Ono sto oni kazu je da koristis MD5('password' . $user_id . $timestamp_registred . $const_salt);

Gde $user_id . $timestamp_registred je neki deo koji nije fiksni tako da ako 2 korisnika imaju istu lozinku ti to neces skontati sem ako ne znas formulu po kojoj je dobijen taj salt deo.
A $const_salt sluzi sa produzivanje potrebnog vremena za provaljivanje sifre.


Opet, ceo ovaj princip je vezan za smestanje lozinki na server a ne za sigurnije cuvanje u cookie jer ma kakav salt bio kada ukradem cookie ja cu opet uci na sajt.

Uci cu i sa onim random stringom o kojem sam ja pricao ali to ce biti privremeni ulazak jer se taj random string sa vremena na vreme menja.
I druga stvar je sto kada se koristi random string onda ima smisla raditi i provere kao sto je IP, browser i ko zna sta jos a ako se koristi MD5($pass.$salt)
onda su ove dodatne provere bezvredne jer ti ne mozes generisati novi MD5($pass.$salt) i pitati korisnika ponovo za lozinku a ja mogu generisati novi random string i pitati korisnika za lozinku.



[Ovu poruku je menjao VladaSu dana 30.09.2011. u 16:42 GMT+1]
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 15:46 - pre 152 meseci
Opet nisi razumeo...
Citat:
VladaSuOpet, ceo ovaj princip je vezan za smestanje lozinki na server a ne za sigurnije cuvanje u cookie jer ma kakav salt bio kada ukradem cookie ja cu opet uci na sajt.
Gde sam ja napisao da je sigurno čuvanje podataka u cookies? Bar 3 puta sam napisao da nije bitna kompleksnost podataka kada se smešta u cookies. Imaš cookies - prijavljen si. Nema potrebe da pišeš nešto što nisam nigde spomenuo (tj. izvrćeš bezveze ono što sam napisao)...
Citat:
Ako ti neko ukrade bazu (recimo neki backup) on opet ne moze nista ako ne zna sifre, pa i live bazu da drpi samo ce imati neke informacije ali nece moci menjati
podatke na live serveru preko nekog korisnika sajta jer nece znati sifru. Zato se sifre kriptuju.
E vidiš tu opet grešiš. Baš zbog toga sam spominjao da je bitna kompleksnost kriptovanja lozinke kada se smešta u bazu podataka. Pa ne koriste razni CMS-ovi i poznate forum skripte za džabe sopstvene metode za kriptovanje koje uključuju i salt, a ne "običnu" md5 metodu koja se čak i može provaliti (ili si ti mislio da ne može da se provali pa te bune ovi moji tekstovi? To je u stvari bila i poenta celog onog teksta...). Zato je poželjno koristiti unique salt za svakog korisnika posebno, jer je provaljivanje lozinke znatno otežano čak i ako nekako uspeš da provališ jednu lozinku.
Zato ja koristim hash + unique salt za svakog korisnika što se smešta u bazu podatka + neki konstantan "site kod" koji nije smešten u bazu podataka. Možeš misliti koliko je muke potrebno provaliti sve to.

Citat:
Ne vidim nikakvu razliku izmedju tvog i mog primera sem sto ti prepoznajes usera po user_name a ja po user_id
i sto ti u taj random ubacis user_name ali cemu to kada je to svakako neki random...
Da, sistem je sličan (klasičan) osim što sam dodao i ovo:
Citat:
Korisnici koji se prijave preko cookies-a ne mogu pristupiti nekim zaštićenim informacijama ili funkcijama kao npr. promena lozinke...
Da bi dobio ove privilegije korisnik mora ponovo da ukuca korisničko ime i lozinku u formi (ili prilikom submitovanja forme).
-Takodje nije loše praviti log fajl za sve sumnjive prijave (npr. korisnik ima login cookie, ali podaci se ne slažu sa onim iz baze podataka) i eventualno upozoriti korisnika o "invalid login".
Što može biti veoma korisno ako dodje do krađe cookies-a.

[Ovu poruku je menjao ivan.a dana 30.09.2011. u 17:30 GMT+1]
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout30.09.2011. u 18:14 - pre 152 meseci
@Ivane
Aha, ok. Ti si se nadovezao na pricu gde smo pricali o problemu stavljanja MD5 passworda u cookie gde rece da je sigurnije stavljati sa salt. Nisam kontao da mislis na stvaljanje u bazu.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Insider_m
Web developer

Član broj: 290688
Poruke: 98
77.28.204.*



+7 Profil

icon Re: Brisanje cookie pri logout03.10.2011. u 22:09 - pre 152 meseci
@VladaSu
Ako sam dobro shvatio, najprije treba da kreiram tabelu u kod ce cuvati user_id, random_string, timestamp. Pa spored toga nije bitno dali u cookie bi cuvao username ili password, tuku bilo kakav zapis preko koga bi prepoznao dali nekog prethodno je bio logovan. I vrjednost od tog random_string zapisem u cookie.
Otkako ke se izvrsi provera i korisnik automatski je ulogovan, treba da kreiram nov zapis u tabelu, za isti user_id ali sa razlicnog strigna, i sljedeci put da proveravam tog stringa.

Ja cu probati sve to. ali evo i mog koda pa ako nekog ima neko ideju kade grjesim, moze mi pomoci da nadzem gresku i sve to popraviti
( za md5 sam shvatio, zato trgnite to nastranu )

ove su vrednoste cookie od pocetka:
Code:

$config->cookie = array();
        $config->cookie['domain'] = "mysite";
        $config->cookie['path'] = "/";
        $config->cookie['session_time'] = 2592000; 
        $config->cookie['username'] = 'uname';
        $config->cookie['password'] = 'upwd';


evo funkciju koju koristim za cookie:

Code:
function set_cookie($name, $cookiedata, $cookietime = 0) {
        global $config;
        setcookie($name, $cookiedata, ($cookietime ? time() + $cookietime : 0), $config->cookie['path'], $config->cookie["domain"], 0);
}


od sledecek kodu, prva pravim proverku dali postoi cookie, a ako ne postoi izvrsim logovanja preku vrjednosti uneseni od logina

Code:

if(isset($_COOKIE['uname']) && isset($_COOKIE['upwd'])) {
        if($_COOKIE['uname'] != '' && $_COOKIE['upwd'] != '') {
                if($user->login($_COOKIE['uname'], $_COOKIE['upwd'])) {
                        echo 'sucess';
                } else {
                        echo 'error';
                }
                $sql = "SELECT * FROM users WHERE username = '".$_COOKIE['uname']."' AND password = '".$_COOKIE['upwd']."' LIMIT 1";
                if(count($db->get_results($sql)) > 0) {
                        $login_errors[] = 'success';
                        header("Location: /user_profile");  
                } else {
                        // error
                }
        }

} else if($_SERVER['REQUEST_METHOD']=='POST') {
        if(isset($_POST['login'])) {
                $usercheck = mysql_real_escape_string($usercheck);
                $passcheck = mysql_real_escape_string($passcheck);

                $keep_logged = 0;
                if($remember_me == 'yes') {
                                $keep_logged = 365 * 24 * 60 * 60;
                }

                if(trim($usercheck) != "" && trim($passcheck) != "" ) {
                        if($user->login($usercheck, $passcheck)) {
                                set_cookie($config->cookie['username'], $usercheck, $keep_logged);
                                set_cookie($config->cookie['password'], md5($passcheck), $keep_logged);
                        } else {
                                $login_errors[] = "Enter valid data";
                        }
                } else {
                        $login_errors[] = "Fill the fields for username and password";
                }
        }
 } else  {
// nesta
}
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Brisanje cookie pri logout05.10.2011. u 11:06 - pre 152 meseci
Najbolje da to smestis u klasu jer ces na vise mesta vise puta u toku jednog izvrsavanja koda proveravati da li je logovan.
Sada idem redom sta tvoj kod radi i sta su mu mane.
1. Proveravas da li ti je cookie setovan i onda odradjujes login.
Ne, tu ne treba login vec provera da li je logovan jer se predpostavlja da je logovan (mozda podaci nisu validni ali je on u pokusaju da bude logovan).
Proveravas da li je logovan a ne treba da ga logujes.
Znaci redovi 3,4,5,6 i 7 ti ne trebaju.
2. Osmi red gde ti je sql treba da esapujes cookie-e.
3. Ako deveti red prodje on ce uvek da se redirektuje na tu stranicu ako je setovan cookie i ako prodje, tj ako je logovan uvek ce da se redirektuje i padas u mrtvu petlju.
4. Zasto ti je u ELSE sledeci deo? } else if($_SERVER['REQUEST_METHOD']=='POST') {
Sta ako ima u cookie pogresne ili stare podatke onda nikada nece doci do ovog dela da moze da se loguje niti ce se ikada ulogovati. TU TI JE PROBLEM STO SI PITAO.
Izbaci else.
5. Ostatak koda je relativno onda ok ako ovo sredis.

Evo jedne preporuke.
Ovo je relativno mali deo koda i vidim da znas da se sluzis sa naredbama (sem ako ne prepravljas neki kod) ali najveci problem ti je to
sto ne mozes da ispratis tok radnje koju zelis da obradis. Kod je nefunkcionalan i bez logike.
Nije stvar da li moze bolje ili ne moze vec da li radi ili ne radi. Tvoj kod ne radi sto je mnogo gora opcija nego da li radi bolje ili losije.
Zbog toga bi bilo dobro da napravis algoritam kako bi ti resio ovaj problem pa da ga okacis da vidim


Evo nesto najjednostavnije u kojem pravcu treba da ides.

Code (php):

function getCookie($var, $default = "")
{
    return isset($_COOKIE[$var]) ? $_COOKIE[$var] : $default;
}

class User
{  
    private $users_table        = 'users';
    private $users_login_table  = 'users_login';
   
    private $cookie_login_time  = 604800; //seven days in seconds
    private $cookie_user_id     = 'user_id';
    private $cookie_unique      = 'unique';
    private $user_data          = array();

    public function isLogged()
    {    
        if (!empty($this->user_data)) { return true; }
       
        $c_user_id = intval(getCookie($this->cookie_user_id, ''));
        $c_unique = getCookie('unique', '');

        if (!$c_user_id || !$c_unique) { return false; }
        //sql last login
        $sql = "SELECT `id`, `unique`, `ts`, `ip`
                FROM `{$this->users_login_table}`
                WHERE `user_id`='{$c_user_id}'
                ORDER BY `ts` DESC
                LIMIT 1"
;
        $last_login = DB::sql($sql, DB_SINGLE_ARRAY, FETCH_ASOCC);

        if (!$last_login)                       { return false; }
        if ($last_login["unique"] != $c_unique) { return false; }

        //sql user
        $sql = "SELECT *
                FROM `{$this->users_table}`
                WHERE `id`='{$c_user_id}'
                LIMIT 1"
;
        if (!$user = DB::sql($sql, DB_SINGLE_ARRAY, FETCH_ASOCC)) { return false; }
       
        foreach ($user as $key => $val)
        {
            $this->user_data[$key] = $val;
        }

        return true;
    }
   
    public function login($user_name, $password, $remember = "off") {
       
        $sql = "SELECT *
                FROM `{$this->users_table}`
                WHERE `user_name`='"
. mysql_real_escape_string($user_name) . "'
                LIMIT 1"
;
        if (!$user = DB::sql($sql, DB_SINGLE_ARRAY, FETCH_ASOCC)) { return false; } //nema korisnika sa tim imenom
        if ($user['password'] != md5($password)) { return false; } // losa lozinka
       
       
        //generise se neki random string
        $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
        $unique_id = '';
       
        for ($i = 0; $i < 50; $i++)
        {
            $unique_id .= $characters[mt_rand(0, strlen($characters))];
        }
   
        foreach ($user as $key => $val)  
        {
            $this->user_data[$key] = $val;
        }

        $tm = $remember == "on" ? (time() + $this->cookie_login_time) : 0;

        setCookie($this->cookie_user_id, intval($user["id"]), $tm);
        setCookie($this->cookie_unique, $unique_id, $tm);
       
        //upisi novi random string
        $sql = "REPLACE INTO `{$this->users_login_table}` (`user_id`,`unique`)
            VALUES ('{$user["
user_id"]}', '{$unique_id}')";
        DB::sql($sql);

        return true;
    }


    public function getData($data=0, $default="")
    {
        return isset($this->user_data[$data]) ? $this->user_data[$data] : $default;
    }
   
    public function logout()
    {
        setcookie($this->cookie_user_id, 0, 0);
        setcookie($this->cookie_unique, 0, 0);
        $this->user_data = array();
    }
}


?>

 

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Insider_m
Web developer

Član broj: 290688
Poruke: 98
89.185.211.*



+7 Profil

icon Re: Brisanje cookie pri logout12.10.2011. u 23:47 - pre 152 meseci
u chromu sad mi radi sve kako sto treba, ali u firefox i dalje se nemogu odlogovati. dali nekog je imao takav problem u firefoxu?
 
Odgovor na temu

[es] :: PHP :: Brisanje cookie pri logout

Strane: 1 2

[ Pregleda: 4646 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.