PHP-istunto ja PHP-evästeet esimerkin kanssa

⚡ Älykäs yhteenveto

PHP:n evästeet ja istunnot säilyttävät tilan tilattoman HTTP-protokollan kautta, mutta tallentavat tiedot eri tavoin. Tämä ohje selittää, miten evästeet tallentavat pieniä tiedostoja asiakkaalle, miten istunnot säilyttävät tiedot palvelimelle ja miten näitä kaikkia luodaan, luetaan ja tuhotaan toimivalla koodilla.

  • 🍪 Mitä evästeet ovat: Eväste on pieni, enintään 4 kt:n kokoinen tiedosto, jonka palvelin tallentaa asiakkaalle ja joka palaa jokaisen myöhemmän pyynnön yhteydessä.
  • 🗄️ Mitä istunnot ovat: Istunto tallentaa tiedot palvelimelle yksilöllisen tunnuksen alle, joka sijaitsee $_SESSION-taulukossa ja johon istuntoeväste viittaa.
  • 🆚 Keskeinen ero: Evästeet sijaitsevat asiakasohjelmassa ja sopivat pienille, ei-arkaluontoisille tiedoille; istunnot taas sijaitsevat palvelimella ja sisältävät suurempia tai yksityisiä tietoja.
  • 🛠️ Evästeiden luominen: setcookie() asettaa nimen, arvon ja valinnaiset vanhenemis-, polku-, verkkotunnus-, suojattu- ja httponly-liput ennen mitä tahansa HTML-tulostetta.
  • 📝 Istuntojen luominen: session_start() aloittaa istunnon, jonka jälkeen luet ja kirjoitat arvoja $_SESSION-superglobaalin taulukon kautta.
  • 🗑️ Siivota: Voit vanhentaa evästeen asettamalla sille menneen ajan; lopettaa istunnon session_destroy()-funktiolla tai tyhjentää yhden arvon unset()-funktiolla.
  • 🤖 AI Assist: Tekoälytyökalut voivat toteuttaa turvallisen istunnonkäsittelyn ja merkitä eväste- tai istuntoheikkouksia olemassa olevassa PHP-koodissa.

PHP-evästeet ja -istunnot

Mikä on Cookie?

Eväste on pieni tiedosto, jonka koko on enintään 4 kt ja jonka verkkopalvelin tallentaa asiakastietokoneelle.

Kun eväste on asetettu, kaikki seuraavat sivupyynnöt palauttavat evästeen nimen ja arvon.

Eväste voidaan lukea vain siitä verkkotunnuksesta, josta se on lähetetty. Esimerkiksi evästettä, joka on asetettu verkkotunnukseen www.guru99.com, ei voida lukea verkkotunnuksesta karrier.guru99.com.

Suurin osa Internetin verkkosivustoista näyttää elementtejä muista verkkotunnuksista, kuten mainonnasta. Näitä elementtejä palvelevat verkkotunnukset voivat myös asettaa omia evästeitään. Näitä kutsutaan kolmannen osapuolen evästeiksi.

Käyttäjän luoma eväste voi olla näkyvissä vain hänelle. Muut käyttäjät eivät näe sen arvoa.

Useimmissa verkkoselaimissa on vaihtoehtoja evästeiden, kolmannen osapuolen evästeiden tai molempien poistamiseen käytöstä.

Jos näin on, PHP vastaa välittämällä evästetunnuksen URL.

Alla oleva kaavio havainnollistaa evästeiden toimintaa.

Mikä on Cookie

Täällä

1) Käyttäjä pyytää sivua, joka tallentaa evästeitä

2) Palvelin asettaa evästeen käyttäjän tietokoneelle

3) Muut käyttäjän sivupyynnöt palauttavat evästeen nimen ja arvon

Miksi ja milloin evästeitä tulee käyttää?

  • HTTP on tilaton protokolla; evästeet mahdollistavat meille track tarkistaa sovelluksen tilan käyttämällä käyttäjän tietokoneelle tallennettuja pieniä tiedostoja. Evästeiden tallennuspolku riippuu selaimesta. Internet Explorer tallentaa ne yleensä Temporary Internet Files -kansioon.
  • Käyttäjäkokemuksen personointi – tämä saavutetaan antamalla käyttäjien valita mieltymyksensä. Seuraavat sivupyynnöt personoidaan evästeiden asetuksiin perustuen.
  • Tracking käyttäjän vierailemat sivut

Evästeiden luominen

Tarkastellaan nyt evästeen luomiseen käytettyä perussyntaksia.

<?php

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

?>

TÄSSÄ,

  • ”setcookie” on PHP-toiminto käytetään evästeen luomiseen.
  • ”cookie_name” on evästeen nimi, jota palvelin käyttää noutaessaan sen arvon $_COOKIE-taulukkomuuttujasta. Se on pakollinen.
  • ”cookie_value” on evästeen arvo ja se on pakollinen.
  • ”[expiry_time]” on valinnainen; sitä voidaan käyttää evästeen vanhenemisajan asettamiseen, kuten 1 tunti. Aika asetetaan PHP:n time()-funktiolla plus tai miinus nollaa suurempi sekuntimäärä, eli time() + 3600, jos kyseessä on 1 tunti.
  • "[cookie_path]" on valinnainen; sitä voidaan käyttää evästepolun asettamiseen palvelimelle. Kenoviiva "/" tarkoittaa, että eväste on saatavilla koko verkkotunnuksessa. Alihakemistot rajoittavat evästeiden pääsyä aliverkkotunnukseen.
  • ”[domain]” on valinnainen; sitä voidaan käyttää evästeiden käyttöoikeushierarkian määrittämiseen, esim. www.cookiedomain.com tarkoittaa koko verkkotunnusta samalla kun www.sub.cookiedomain.com rajoittaa evästeiden käyttöä www.sub.cookiedomain.com ja sen alialueet.
  • ”[secure]” on valinnainen; oletusarvo on false. Sitä käytetään määrittämään, lähetetäänkö eväste HTTPS:n kautta, jos se on asetettu arvoon true, vai HTTP:n kautta, jos se on asetettu arvoon false.
  • ”[httponly]” on valinnainen. Jos se on asetettu arvoon true, niin asiakaspuolen komentosarjakielet, kuten JavaKäsikirjoitus ei pääse käsiksi evästeeseen.

Huomautus: PHP:n setcookie-funktio on suoritettava ennen HTML-aloitustagia.

Katsotaanpa nyt esimerkkiä, jossa käytetään evästeitä.

Luomme perusohjelman, jonka avulla voimme tallentaa käyttäjätunnuksen evästeeseen, joka vanhenee 60 sekunnin kuluttua.

Alla oleva koodi näyttää yllä olevan esimerkin "cookies.php" toteutuksen.

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

lähtö:

the cookie has been set for 60 seconds

Haetaan evästeen arvoa

Luo toinen tiedosto nimeltä "cookies_read.php" seuraavalla koodilla.

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

lähtö:

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

Huomautus: $_COOKIE on PHP:n sisäänrakennettu superglobaali muuttuja. Se sisältää kaikkien asetettujen evästeiden nimet ja arvot.

Evästeiden määrää ja kokoa rajoittaa selain, tyypillisesti noin 50 evästettä verkkotunnusta kohden ja 4 kt evästettä kohden.

Sovelluksemme testaaminen. Oletetaan, että olet tallentanut PHP-tiedostosi phptuts-kansioon.

  • Vaihe 1 – avaa verkkoselaimesi ja kirjoita URL http://localhost/phptuts/cookies_read.php

Haetaan evästeen arvoa

Huomautus: Vain tyhjä taulukko on näytetty

  • Vaihe 2 – selaa kohtaan URL http://localhost/phptuts/cookies.php

Haetaan evästeen arvoa

  • Vaihe 3 – palaa ensimmäiseen välilehteen ja napsauta sitten päivitä-painiketta

Haetaan evästeen arvoa

Odota hetki ja napsauta sitten päivitä-painiketta uudelleen. Mitä tuloksia sait?

Poista evästeet

  • Jos haluat tuhota evästeen ennen sen vanhenemisaikaa, aseta vanhenemisajaksi aika, joka on jo kulunut.
  • Luo uusi tiedosto nimeltä cookie_destroy.php seuraavalla koodilla:
<?php

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

?>
  • Toista yllä olevan osan vaiheet 1–3 evästearvojen noutamisesta.
  • Avaa URL http://localhost/phptuts/cookie_destroy.php
  • Vaihda URL http://localhost/phptuts/cookies_read.phpMitä tuloksia se näyttää?

Mikä on istunto?

  • Istunto on globaali muuttuja, joka on tallennettu palvelimelle.
  • Jokaiselle istunnolle on määritetty yksilöllinen tunnus, jota käytetään tallennettujen arvojen noutamiseen.
  • Aina kun istunto luodaan, käyttäjän tietokoneelle tallennetaan eväste, joka sisältää yksilöllisen istuntotunnuksen, ja se palautetaan jokaisen palvelimelle tehdyn pyynnön yhteydessä. Jos asiakasselain ei tue evästeitä, yksilöllinen PHP-istuntotunnus näytetään URL.
  • Istunnot pystyvät tallentamaan suhteellisen suuria tietoja evästeisiin verrattuna.
  • Istuntoarvot poistetaan automaattisesti, kun selain suljetaan. Jos haluat tallentaa arvot pysyvästi, sinun tulee tallentaa ne tietokantaan.
  • Aivan kuten $_COOKIE-taulukkomuuttuja, istunnon muuttujat tallennetaan $_SESSION-taulukkomuuttujaan. Evästeiden tapaan istunto on aloitettava ennen HTML-tageja.

Miksi ja milloin käyttää istuntoja?

  • Haluat tallentaa tärkeät tiedot, kuten käyttäjätunnuksen, turvallisemmin palvelimelle, jossa pahantahtoiset käyttäjät eivät voi muuttaa niitä.
  • Haluat siirtää arvoja sivulta toiselle.
  • Haluat vaihtoehdon evästeille selaimissa, jotka eivät tue evästeitä.
  • Haluat tallentaa globaalit muuttujat tehokkaalla ja turvallisemmalla tavalla kuin välittää ne URL.
  • Olet kehittynytping sovellus, kuten kauppaping ostoskori, jonka on tallennettava väliaikaisesti yli 4 kt:n kapasiteettisia tietoja.

Istunnon luominen

Istunnon luomiseksi sinun on ensin kutsuttava PHP:n session_start-funktiota ja tallennettava sitten arvot $_SESSION-taulukkomuuttujaan.

Oletetaan, että haluamme tietää, kuinka monta kertaa sivu on ladattu. Voimme käyttää tähän istuntoa.

Alla oleva koodi näyttää, miten istunnoista luodaan ja noudetaan arvoja.

<?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'];

?>

lähtö:

You are visitor number 1

Istuntomuuttujien tuhoaminen

session_destroy()-funktiota käytetään koko PHP-istunnon tuhoamiseen.

Jos haluat tuhota vain yhden istuntokohteen, käytät unset()-funktiota.

Alla oleva koodi havainnollistaa molempien menetelmien käyttöä.

<?php

session_destroy(); // destroy entire session

?>
<?php

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

?>

session_destroy poistaa kaikki istuntotiedot, mukaan lukien istuntoon liittyvät evästeet.

unset vapauttaa vain yksittäiset istuntomuuttujat. Muut tiedot pysyvät ennallaan.

UKK

Evästeet tallentavat tietoja pieneen tiedostoon käyttäjän selaimeen ja kulkevat jokaisen pyynnön mukana. Istunto tallentaa tietoja palvelimelle ja lähettää vain istuntotunnuksen evästeen. Istunto on turvallisempi arkaluonteisille tai suuremmille tiedoille.

Oletusarvoisesti PHP tallentaa istuntotiedot tiedostoina php.ini-tiedostossa session.save_path-parametrilla määritettyyn polkuun, joka on usein järjestelmän väliaikaishakemisto. Paljon liikennettä saaneet sivustot vaihtavat usein tämän tietokantaan, Redisiin tai Memcached-käsittelijään.

Aseta HttpOnly-lippu niin JavaSkripti ei voi lukea evästettä, Secure-lippua, joten se kulkee vain HTTPS:n kautta, ja SameSite-attribuuttia sivustojen välisen lähettämisen rajoittamiseksi. Istuntojen osalta ID on luotava uudelleen kirjautumisen jälkeen.

Kyllä. Tekoäly voi luoda kirjautumisprosessin, joka luo istuntotunnuksen uudelleen, asettaa suojatut evästeliput, tallentaa minimaalisesti tietoja palvelimelle ja valvoo aikakatkaisuja. RevVertaa tulostetta tietoturvavaatimuksiasi vasten.

Kyllä. Tekoäly voi etsiä puuttuvia HttpOnly- tai Secure-lippuja, istunnon jumiutumisriskejä, arkaluonteisten tietojen tallentamista evästeisiin ja puuttuvaa tunnisteen uudelleenluontia kirjautumisen jälkeen ja ehdottaa sitten korjattua koodia.

Tiivistä tämä viesti seuraavasti: