PHP sesija i PHP kolačići s primjerom

⚡ Pametni sažetak

Kolačići i sesije u PHP-u čuvaju stanje u HTTP protokolu bez stanja, ali podatke pohranjuju na različite načine. Ovaj vodič objašnjava kako kolačići spremaju male datoteke na klijentu, kako sesije čuvaju podatke na poslužitelju i kako ih stvoriti, čitati i uništiti pomoću funkcionalnog koda.

  • 🍪 Što su kolačići: Kolačić je mala datoteka, veličine do 4KB, koju poslužitelj pohranjuje na klijentu i koja se vraća sa svakim sljedećim zahtjevom.
  • 🗄️ Što su sesije: Sesija pohranjuje podatke na poslužitelju pod jedinstvenim ID-om, koji se čuva u nizu $_SESSION i na koji se referencira kolačić sesije.
  • 🆚 Ključna razlika: Kolačići se nalaze na klijentu i prilagođeni su malim, neosjetljivim podacima; sesije se nalaze na poslužitelju i sadrže veće ili privatne podatke.
  • 🛠️ Izrada kolačića: setcookie() postavlja naziv, vrijednost i opcionalne oznake isteka, putanje, domene, sigurnosti i httponly prije bilo kojeg HTML izlaza.
  • 📝 Stvaranje sesija: session_start() započinje sesiju, nakon čega čitate i pišete vrijednosti putem superglobalnog niza $_SESSION.
  • 🗑️ Čišćenje: Istek kolačića postavljanjem prošlog vremena; završite sesiju s session_destroy() ili obrišite jednu vrijednost s unset().
  • 🤖 AI pomoć: Alati umjetne inteligencije mogu implementirati sigurno rukovanje sesijama i označiti slabosti kolačića ili sesija u postojećem PHP kodu.

PHP kolačići i sesije

Što je Cookie?

Kolačić je mala datoteka maksimalne veličine 4KB koju web poslužitelj pohranjuje na klijentsko računalo.

Nakon što je kolačić postavljen, svi zahtjevi stranice koji slijede vraćaju naziv i vrijednost kolačića.

Kolačić se može čitati samo s domene s koje je izdan. Na primjer, kolačić postavljen pomoću domene www.guru99.com ne može se čitati s domene career.guru99.com.

Većina web stranica na internetu prikazuje elemente iz drugih domena kao što je oglašavanje. Domene koje poslužuju ove elemente također mogu postaviti vlastite kolačiće. Oni su poznati kao kolačići treće strane.

Kolačić koji kreira korisnik može biti vidljiv samo njemu. Drugi korisnici ne mogu vidjeti njegovu vrijednost.

Većina web preglednika ima opcije za onemogućavanje kolačića, kolačića trećih strana ili oboje.

Ako je to slučaj, PHP odgovara prosljeđivanjem tokena kolačića u URL.

Donji dijagram ilustrira kako funkcioniraju kolačići.

Što je Cookie

Ovdje,

1) Korisnik zatraži stranicu koja pohranjuje kolačiće

2) Poslužitelj postavlja kolačić na računalo korisnika

3) Ostali zahtjevi stranice od korisnika vratit će naziv i vrijednost kolačića

Zašto i kada koristiti kolačiće?

  • HTTP je protokol bez stanja; kolačići nam omogućuju track stanje aplikacije pomoću malih datoteka pohranjenih na korisnikovom računalu. Putanja gdje se kolačići pohranjuju ovisi o pregledniku. Internet Explorer ih obično pohranjuje u mapu Privremene internetske datoteke.
  • Personalizacija korisničkog iskustva – to se postiže tako da se korisnicima omogući odabir vlastitih preferencija. Zahtjevi za stranice koji slijede personalizirani su na temelju preferencija postavljenih u kolačićima.
  • Tracking stranice koje je korisnik posjetio

Stvaranje kolačića

Pogledajmo sada osnovnu sintaksu koja se koristi za stvaranje kolačića.

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

?>

OVDJE,

  • "setcookie" je PHP funkcije koristi se za izradu kolačića.
  • „cookie_name“ je naziv kolačića koji će poslužitelj koristiti prilikom dohvaćanja njegove vrijednosti iz varijable polja $_COOKIE. Obavezan je.
  • „cookie_value“ je vrijednost kolačića i obavezna je.
  • „[expiry_time]” je opcionalno; može se koristiti za postavljanje vremena isteka kolačića, na primjer 1 sat. Vrijeme se postavlja pomoću PHP funkcije time() plus ili minus broj sekundi veći od 0, tj. time() + 3600 za 1 sat.
  • “[cookie_path]” nije obavezan; može se koristiti za postavljanje puta kolačića na poslužitelju. Kosa crta naprijed “/” znači da će kolačić biti dostupan na cijeloj domeni. Poddirektorije ograničavaju pristup kolačića na poddomenu.
  • „[domena]“ je opcionalno; može se koristiti za definiranje hijerarhije pristupa kolačićima, tj. www.cookiedomain.com znači cijelu domenu dok www.sub.cookiedomain.com ograničava pristup kolačića www.sub.cookiedomain.com i njegove poddomene.
  • „[secure]” je opcionalno; zadana vrijednost je false. Koristi se za određivanje šalje li se kolačić putem HTTPS-a ako je postavljen na true ili HTTP-a ako je postavljen na false.
  • "[httponly]" je opcionalno. Ako je postavljeno na true, tada će skriptni jezici na strani klijenta, kao što su JavaScript ne može pristupiti kolačiću.

Bilješka: PHP funkcija setcookie mora se izvršiti prije HTML početne oznake.

Pogledajmo sada primjer koji koristi kolačiće.

Napravit ćemo osnovni program koji nam omogućuje pohranjivanje korisničkog imena u kolačić koji istječe nakon šezdeset sekundi.

Kod u nastavku prikazuje implementaciju gornjeg primjera "cookies.php".

<?php
setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds
echo 'the cookie has been set for 60 seconds';
?>

Izlaz:

the cookie has been set for 60 seconds

Dohvaćanje vrijednosti kolačića

Napravite drugu datoteku pod nazivom “cookies_read.php” sa sljedećim kodom.

<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>

Izlaz:

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )

Napomena: $_COOKIE je PHP ugrađena superglobalna varijabla. Sadrži nazive i vrijednosti svih postavljenih kolačića.

Broj kolačića i njihova veličina ograničeni su preglednikom, obično oko 50 kolačića po domeni i 4 KB po kolačiću.

Testiranje naše aplikacije. Pretpostavimo da ste spremili svoje PHP datoteke u mapu phptuts.

  • Korak 1 – otvorite web preglednik i unesite URL http://localhost/phptuts/cookies_read.php

Dohvaćanje vrijednosti kolačića

Napomena: Prikazan je samo prazan niz

  • Korak 2 – pregledajte URL http://localhost/phptuts/cookies.php

Dohvaćanje vrijednosti kolačića

  • Korak 3 – vratite se na prvu karticu, a zatim kliknite gumb za osvježavanje

Dohvaćanje vrijednosti kolačića

Pričekajte minutu, a zatim ponovno kliknite gumb za osvježavanje. Kakve ste rezultate dobili?

Izbriši kolačiće

  • Ako želite uništiti kolačić prije isteka vremena, tada postavite vrijeme isteka na vrijeme koje je već prošlo.
  • Napravite novu datoteku pod nazivom cookie_destroy.php sa sljedećim kodom
<?php

setcookie("user_name", "Guru99", time() - 360,'/');

?>
  • Ponovite korake od 1 do 3 iz gornjeg odjeljka o preuzimanju vrijednosti kolačića.
  • Otvorite URL http://localhost/phptuts/cookie_destroy.php
  • Prijeđi na URL http://localhost/phptuts/cookies_read.phpKakve rezultate prikazuje?

Što je sesija?

  • Sesija je globalna varijabla pohranjena na poslužitelju.
  • Svakoj sesiji dodjeljuje se jedinstveni ID koji se koristi za dohvaćanje pohranjenih vrijednosti.
  • Kad god se kreira sesija, kolačić koji sadrži jedinstveni ID sesije pohranjuje se na korisničkom računalu i vraća se sa svakim zahtjevom poslužitelju. Ako klijentski preglednik ne podržava kolačiće, jedinstveni PHP ID sesije prikazuje se u URL.
  • Sesije imaju kapacitet pohranjivanja relativno velike količine podataka u usporedbi s kolačićima.
  • Vrijednosti sesije automatski se brišu kada se preglednik zatvori. Ako želite trajno pohraniti vrijednosti, trebali biste ih pohraniti u bazu podataka.
  • Baš kao i varijabla polja $_COOKIE, varijable sesije pohranjene su u varijabli polja $_SESSION. Baš kao i kolačići, sesija se mora pokrenuti prije bilo koje HTML oznake.

Zašto i kada koristiti Sessions?

  • Želite sigurnije pohraniti važne podatke poput korisničkog ID-a na poslužitelju gdje ih zlonamjerni korisnici ne mogu mijenjati.
  • Želite proslijediti vrijednosti s jedne stranice na drugu.
  • Želite alternativu kolačićima u preglednicima koji ne podržavaju kolačiće.
  • Želite pohraniti globalne varijable na učinkovit i sigurniji način u usporedbi s njihovim prosljeđivanjem u URL.
  • Razvijate seping aplikacija kao što je trgovinaping košarica koja mora privremeno pohraniti informacije kapaciteta većeg od 4KB.

Stvaranje sesije

Da biste kreirali sesiju, prvo morate pozvati PHP funkciju session_start, a zatim pohraniti vrijednosti u varijablu $_SESSION.

Pretpostavimo da želimo znati koliko je puta stranica učitana. Za to možemo koristiti sesiju.

Donji kod pokazuje kako kreirati i dohvaćati vrijednosti iz sesija.

<?php

session_start(); // start the session

if(isset($_SESSION['page_count']))
{
$_SESSION['page_count'] += 1;
}
else
{
$_SESSION['page_count'] = 1;
}
echo 'You are visitor number ' . $_SESSION['page_count'];

?>

Izlaz:

You are visitor number 1

Uništavanje varijabli sesije

Funkcija session_destroy() se koristi za uništavanje cijele PHP sesije.

Ako želite uništiti samo jednu stavku sesije, koristite funkciju unset().

Kôd u nastavku ilustrira kako koristiti obje metode.

<?php

session_destroy(); // destroy entire session

?>
<?php

unset($_SESSION['product']); // destroy product session item

?>

session_destroy uklanja sve podatke sesije, uključujući kolačiće povezane sa sesijom.

unset oslobađa samo pojedinačne varijable sesije. Ostali podaci ostaju netaknuti.

Pitanja i odgovori

Kolačići pohranjuju podatke u malu datoteku u korisnikovom pregledniku i putuju sa svakim zahtjevom. Sesije pohranjuju podatke na poslužitelju i šalju samo kolačić s ID-om sesije. Sesije su sigurnije za osjetljive ili veće podatke.

Prema zadanim postavkama, PHP sprema podatke sesije kao datoteke na putanju koju postavlja session.save_path u php.ini, često u privremenom direktoriju sustava. Web-mjesta s puno prometa često to prebacuju na bazu podataka, Redis ili Memcached handler.

Postavite zastavicu HttpOnly tako da JavaSkripta ne može pročitati kolačić, ima zastavicu Secure pa putuje samo putem HTTPS-a i atribut SameSite za ograničavanje slanja između web-mjesta. Za sesije, regenerirajte ID nakon prijave.

Da. Umjetna inteligencija može generirati tok prijave koji regenerira ID sesije, postavlja sigurne oznake kolačića, pohranjuje minimalne podatke na strani poslužitelja i provodi vremensko ograničenje. Revusporedite izlaz s vašim sigurnosnim zahtjevima.

Da. Umjetna inteligencija može skenirati nedostajuće HttpOnly ili Secure zastavice, rizike fiksiranja sesije, pohranjivanje osjetljivih podataka u kolačiće i izostanak regeneracije ID-a nakon prijave, a zatim predložiti ispravljeni kod.

Sažmite ovu objavu uz: