PHP-sessie en PHP-cookies met voorbeeld

⚡ Slimme samenvatting

Cookies en sessies in PHP behouden beide de status van gegevens tijdens het stateless HTTP-protocol, maar slaan gegevens op verschillende manieren op. Deze handleiding legt uit hoe cookies kleine bestanden op de client opslaan, hoe sessies gegevens op de server bewaren en hoe je ze beide kunt aanmaken, lezen en verwijderen met behulp van werkende code.

  • 🍪 Wat cookies zijn: Een cookie is een klein bestandje, tot 4 KB, dat de server op de client opslaat en dat bij elk volgend verzoek wordt meegestuurd.
  • ️ Wat zijn sessies? Een sessie slaat gegevens op de server op onder een unieke ID, die wordt bewaard in de array $_SESSION en waarnaar wordt verwezen door een sessiecookie.
  • 🆚 Belangrijkste verschil: Cookies worden aan de clientzijde opgeslagen en zijn geschikt voor kleine, niet-gevoelige gegevens; sessies worden aan de serverzijde opgeslagen en bevatten grotere of vertrouwelijke gegevens.
  • ️ Koekjes maken: De functie `setcookie()` stelt een naam, waarde en optionele vlaggen voor vervaldatum, pad, domein, beveiliging en httponly in voordat er HTML-uitvoer plaatsvindt.
  • 📝 Sessies aanmaken: session_start() start een sessie, waarna je waarden kunt lezen en schrijven via de superglobale array $_SESSION.
  • 🗑️ Schoonmaken: Een cookie laten verlopen door een tijdstip in het verleden in te stellen; een sessie beëindigen met session_destroy() of een waarde wissen met unset().
  • 🤖 AI-assistentie: AI-tools kunnen veilige sessieafhandeling implementeren en zwakke plekken in cookies of sessies in bestaande PHP-code signaleren.

PHP-cookies en -sessies

Wat is Cookie?

Een cookie is een klein bestandje van maximaal 4 KB dat de webserver op de computer van de gebruiker opslaat.

Zodra een cookie is ingesteld, retourneren alle paginaverzoeken die volgen de cookienaam en -waarde.

Een cookie kan alleen worden gelezen vanaf het domein waar deze is aangemaakt. Een cookie die bijvoorbeeld is ingesteld met het domein www.guru99.com kan niet worden gelezen vanaf het domein www.guru99.com. carrière.guru99.com.

De meeste websites op internet vertonen elementen uit andere domeinen, zoals advertenties. De domeinen die deze elementen bedienen, kunnen ook hun eigen cookies instellen. Deze staan ​​bekend als cookies van derden.

Een cookie die door een gebruiker wordt aangemaakt, kan alleen voor hem of haar zichtbaar zijn. Andere gebruikers kunnen de waarde ervan niet zien.

De meeste webbrowsers bieden opties om cookies, cookies van derden of beide uit te schakelen.

Als dit het geval is, reageert PHP door het cookie-token door te geven. URL.

Het onderstaande diagram illustreert hoe cookies werken.

Wat is Koekje

Hier

1) Een gebruiker vraagt ​​een pagina op die cookies opslaat

2) De server plaatst de cookie op de computer van de gebruiker

3) Andere paginaverzoeken van de gebruiker retourneren de cookienaam en -waarde

Waarom en wanneer cookies gebruiken?

  • HTTP is een stateless protocol; cookies stellen ons in staat om tracDe status van de applicatie wordt bijgehouden met behulp van kleine bestanden die op de computer van de gebruiker worden opgeslagen. De locatie waar de cookies worden opgeslagen, is afhankelijk van de browser. Internet Explorer slaat ze meestal op in de map 'Tijdelijke internetbestanden'.
  • De gebruikerservaring personaliseren – dit wordt bereikt door gebruikers hun voorkeuren te laten selecteren. De daaropvolgende paginaverzoeken worden gepersonaliseerd op basis van de voorkeuren die in de cookies zijn opgeslagen.
  • Tracking de pagina's die een gebruiker heeft bezocht

Cookies maken

Laten we nu eens kijken naar de basissyntaxis die gebruikt wordt om een ​​cookie aan te maken.

<?php

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

?>

HIER,

  • “setcookie” is de PHP-functie gebruikt om de cookie te maken.
  • “cookie_name” is de naam van de cookie die de server gebruikt om de waarde ervan op te halen uit de variabele $_COOKIE. Deze naam is verplicht.
  • “cookie_value” is de waarde van de cookie en is verplicht.
  • “[expiry_time]” is optioneel; hiermee kan de vervaltijd van de cookie worden ingesteld, bijvoorbeeld 1 uur. De tijd wordt ingesteld met de PHP-functie time() plus of min een aantal seconden groter dan 0, bijvoorbeeld time() + 3600 voor 1 uur.
  • “[cookie_path]” is optioneel; het kan worden gebruikt om het cookiepad op de server in te stellen. De forward slash “/” betekent dat de cookie op het hele domein beschikbaar wordt gesteld. Submappen beperken de cookietoegang tot het subdomein.
  • “[domein]” is optioneel; het kan worden gebruikt om de toegangshiërarchie van cookies te definiëren, bijvoorbeeld www.cookiedomain.com betekent het hele domein terwijl www.sub.cookiedomain.com beperkt de toegang tot cookies www.sub.cookiedomain.com en zijn subdomeinen.
  • “[secure]” is optioneel; de standaardwaarde is false. Het wordt gebruikt om te bepalen of de cookie via HTTPS wordt verzonden als het op true is ingesteld, of via HTTP als het op false is ingesteld.
  • “[httponly]” is optioneel. Als het is ingesteld op true, dan kunnen client-side scripttalen zoals JavaScript De cookie is niet toegankelijk.

Let op: De PHP-functie `setcookie` moet worden uitgevoerd vóór de openingstag van het HTML-bestand.

Laten we nu eens kijken naar een voorbeeld dat gebruikmaakt van cookies.

We gaan een eenvoudig programma maken waarmee we de gebruikersnaam in een cookie kunnen opslaan die na zestig seconden verloopt.

Onderstaande code toont de implementatie van het bovenstaande voorbeeld “cookies.php”.

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

Output:

the cookie has been set for 60 seconds

De cookiewaarde ophalen

Maak een ander bestand met de naam “cookies_read.php” met de volgende code.

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

Output:

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

Opmerking: $_COOKIE is een ingebouwde superglobale variabele van PHP. Deze bevat de namen en waarden van alle ingestelde cookies.

Het aantal cookies en hun grootte wordt beperkt door de browser, doorgaans ongeveer 50 cookies per domein en 4 KB per cookie.

We testen onze applicatie. Stel dat je je PHP-bestanden in een phptuts-map hebt opgeslagen.

  • Stap 1 – open uw webbrowser en voer de URL http://localhost/phptuts/cookies_read.php

De cookiewaarde ophalen

Let op: Er wordt alleen een lege array weergegeven

  • Stap 2 – ga naar de URL http://localhost/phptuts/cookies.php

De cookiewaarde ophalen

  • Stap 3 – ga terug naar het eerste tabblad en klik vervolgens op de vernieuwingsknop.

De cookiewaarde ophalen

Wacht een minuut en klik dan opnieuw op de vernieuwingsknop. Welke resultaten kreeg je?

Verwijder cookies

  • Als u een cookie vóór de vervaltijd wilt vernietigen, stelt u de vervaltijd in op een tijdstip dat al is verstreken.
  • Maak een nieuw bestand met de naam cookie_destroy.php aan met de volgende code.
<?php

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

?>
  • Herhaal stap 1 tot en met 3 uit het bovenstaande gedeelte over het ophalen van cookie-waarden.
  • Open de URL http://localhost/phptuts/cookie_destroy.php
  • Schakel over naar de URL http://localhost/phptuts/cookies_read.phpWelke resultaten worden er weergegeven?

Wat is een sessie?

  • Een sessie is een globale variabele die op de server is opgeslagen.
  • Aan elke sessie wordt een uniek ID toegewezen dat wordt gebruikt om opgeslagen waarden op te halen.
  • Wanneer een sessie wordt aangemaakt, wordt een cookie met de unieke sessie-ID op de computer van de gebruiker opgeslagen en bij elk verzoek aan de server meegestuurd. Als de clientbrowser geen cookies ondersteunt, wordt de unieke PHP-sessie-ID weergegeven in de URL.
  • Sessies hebben de capaciteit om relatief grote gegevens op te slaan in vergelijking met cookies.
  • De sessiewaarden worden automatisch verwijderd wanneer de browser wordt gesloten. Als u de waarden permanent wilt opslaan, moet u ze in de database opslaan.
  • Net als de arrayvariabele $_COOKIE worden sessievariabelen opgeslagen in de arrayvariabele $_SESSION. Net als bij cookies moet de sessie vóór eventuele HTML-tags worden gestart.

Waarom en wanneer Sessies gebruiken?

  • Je wilt belangrijke informatie, zoals de gebruikers-ID, veiliger opslaan op de server, zodat kwaadwillenden er niet mee kunnen knoeien.
  • U wilt waarden van de ene pagina naar de andere doorgeven.
  • Je zoekt een alternatief voor cookies in browsers die geen cookies ondersteunen.
  • Je wilt globale variabelen op een efficiëntere en veiligere manier opslaan dan wanneer je ze rechtstreeks doorgeeft. URL.
  • Je bent aan het ontwikkelenping een applicatie zoals een winkelping Een karretje dat tijdelijk informatie moet opslaan met een capaciteit groter dan 4KB.

Een sessie maken

Om een ​​sessie te creëren, moet je eerst de PHP-functie `session_start` aanroepen en vervolgens je waarden opslaan in de arrayvariabele `$_SESSION`.

Stel dat we willen weten hoe vaak een pagina is geladen. Daarvoor kunnen we een sessie gebruiken.

De onderstaande code laat zien hoe je waarden in sessies kunt aanmaken en ophalen.

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

?>

Output:

You are visitor number 1

Sessievariabelen vernietigen

De functie session_destroy() wordt gebruikt om de volledige PHP-sessie te beëindigen.

Als je slechts één sessie-item wilt verwijderen, gebruik je de functie unset().

De onderstaande code illustreert hoe u beide methoden kunt gebruiken.

<?php

session_destroy(); // destroy entire session

?>
<?php

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

?>

`session_destroy` verwijdert alle sessiegegevens, inclusief de cookies die aan de sessie zijn gekoppeld.

Met `unset` worden alleen de individuele sessievariabelen vrijgegeven. Andere gegevens blijven intact.

Veelgestelde vragen

Cookies slaan gegevens op in een klein bestandje in de browser van de gebruiker en worden bij elk verzoek meegestuurd. Sessies slaan gegevens op de server op en versturen alleen een sessie-ID-cookie. Sessies zijn veiliger voor gevoelige of grote hoeveelheden gegevens.

Standaard slaat PHP sessiegegevens op als bestanden in het pad dat is ingesteld door session.save_path in php.ini, vaak de tijdelijke systeemmap. Websites met veel verkeer schakelen hiervoor vaak over naar een database, Redis of Memcached.

Stel de HttpOnly-vlag in, zodat JavaHet script kan de cookie niet lezen, de Secure-vlag (zodat het alleen via HTTPS wordt verzonden) en een SameSite-attribuut (om verzending tussen sites te beperken). Genereer voor sessies de ID opnieuw na het inloggen.

Ja. AI kan een inlogproces genereren dat de sessie-ID opnieuw genereert, beveiligingscookies instelt, minimale gegevens aan de serverzijde opslaat en time-outs afdwingt. RevVergelijk de output met uw beveiligingsvereisten.

Ja. AI kan scannen op ontbrekende HttpOnly- of Secure-vlaggen, risico's op sessiefixatie, het opslaan van gevoelige gegevens in cookies en het niet opnieuw genereren van een ID na het inloggen, en vervolgens de gecorrigeerde code voorstellen.

Vat dit bericht samen met: