Je li bolje čuvati podatke u sessionu ili uvijek raditi upit prema bazi?

Dobro veče,

prvi put radim malo ozbiljnije sa session array-em, kreiram korisnički sistem za sajtić.
Sve funkcioniše kako treba, korisnik se može ulogovati, izlogovati, registrovati, ažurirati, komentarisati itd.

Dakle, ne postoji problem, ali me interesuje mišljenje ostalih oko jedne stvari.

Kada se korisnik uloguje (log.php), u bazi proveravam da li postoji korisnik sa tom kombinacijom korisničkog imena i lozinke, i ako postoji, snimam samo njegov ID u session niz ($_SESSION[‘korisnik’] = njegov id;).

Kasnije, gde god mi je potrebna neka informacija o korisniku, mogu je čitati iz baze uz pomoć ovog ID-a i nekoliko linija koda.

Pitanje: Da li mislite da je bolje čuvati u session nizu samo ovaj jedan podatak (id korisnika), ili je možda bolje sačuvati sve podatke koje bih koristio negde na sajtu kako ne bih morao stalno da šaljem query ?
U obzir uzeti sigurnost i brzinu programa.

Meni je nekako lepše da vučem samo ID, ali definitivno bi skratilo posao oko kucanja kodova ako bi sve to bilo u session nizu. Što se tiče funkcionalnosti, mislim da je svejedno, ali me interesuje koji su potencijalni sigurnosni problemi.

Pozdrav, Nikola?[indent]________________
[size=4][color=green]Naslov ispravljen u skladu s pravilima – služi kao primjer kako pisati naslove.

  • tsereg[/color][/size][/indent]

Što manje podataka spremaš u sessione i cookiese, to bolje.
Šalji samo ID i ništa drugo (ukoliko nije neophodno).

[quote=“dmitrecic”]Što manje podataka spremaš u sessione i cookiese, to bolje.
Šalji samo ID i ništa drugo (ukoliko nije neophodno).[/quote]

Ne slažem se. Spremanje podataka u session štedi serverske resurse, a sa sigurnosne strane je ista stvar jer je isto da li netko otme sesiju u kojoj je samo id ili i drugi podaci.

Naravno treba u svemu tome imati i malo znanja da ne bi bilo sigurnosnih rupa kao spremanje u cookie “admin=1”.

Dobro bi bilo koristiti

<?php session_regenerate_id(); ?>

[quote=“eke777”]Spremanje podataka u session štedi serverske resurse[/quote]Ajde da ja sad nešto naučim od tebe.
Što je session negdje u obalku pa da štedi serverske resurse?

[quote=“Marjan”]Dobro bi bilo koristiti

<?php session_regenerate_id(); ?>[/quote]

Da li si pogledao čemu služi session_regenerate_id() funkcija, ukoliko jesi, da li možeš objasniti kako bi mu to pomoglo, sa sigurnosne strane, a i sa strane pomoći pri riješavanju njegovog problema, bolje rečeno njegove dileme?

[quote=“CreatifCode”]Ajde da ja sad nešto naučim od tebe.
Što je session negdje u obalku pa da štedi serverske resurse?[/quote]

:slight_smile:

Milslio sam u smislu da je serveru lakše jednom dohvatiti ime korisnika iz baze i čuvati ga u sessionu nego na svakom učitavanju stranice slati upit bazi.

Evo šta sam ja uradio za sada. Pošto nisam hteo ni da vučem sve podatke kroz session, a ni da stalno kucam isti kod, napisao sam funkciju koja vuče podatke iz baze, kao parametre joj zadajem 2 stringa, jedan je ime tablice, drugi čine imena parametara koje želim da uzmem iz baze (jer ne želim uvek sve da pokupim).

Kroz session vučem samo ID, a funkciju pozivam jednom linijom kad god su potrebni podaci o korisniku.

A ovisi koji podaci ti trebaju o korisniku.
Ako na svakoj stranici ti treba prezime korisnika onda ima smisla spremati u session.
No ja bih bolje preporučio korištenje neke klase a ne rad direktno sa session.
Zato jer se ima veća kontrala nad session.

Samo ime i prezime spremi u session, jer da, za to nema smisla svako malo uzimat iz baze. Međutim, ako radiš upite na bazu u svakoj toj stranici, onda nema posebnog razloga zašto ne bi napravio i taj dodatan upit za ime i prezime po ID-u korisnika koji se nalazi u sessionu…

Pa razlog je jedan upit manje.

I nije ti neki razlog.
“Session” se negdje mora “spremati” na serveru, a ako nije podešeno drugačije, po defaultu spremanje se vrši na disk (write file).
Jedan upit na bazu više od onog što radiš, ne znači mnogo na perfomanse, a opet je lakše i jednostavnije raditi samo sa jednom session varijablom (kasnije je lakše za održavanje).
Osim ako imaš site za par desetaka tisuća posjetioca dnevno, pa da smanjiš zauzeće SQL servera barem za toliko, ali u tom slučaju ćeš tražiti i druge vrste optimizacije koda, jer ti samo ta jedna dodatna linija upita neće osobito pomoć u perfomansama.

Po meni je i jedno i drugo ok, ali kad imam priliku, koristim samo ID u sessionu.
U slučajevima kada sve stranice na siteu ne pristupaju bazi, u session spremam ID i Ime i prezime korisnika (ne username). Ne zbog brige o perfomansama i sigurnosti, nego iz razloga što na nekim stranicama mi se dešava da nema upita na bazu pa nema smisla da radim kompletni query zbog imena i prezimena.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja