PHP-session og PHP-cookies med eksempel

⚡ Smart opsummering

Cookies og sessioner i PHP bevarer begge tilstand på tværs af den statsløse HTTP-protokol, men lagrer data forskelligt. Denne gennemgang forklarer, hvordan cookies gemmer små filer på klienten, hvordan sessioner opbevarer data på serveren, og hvordan man opretter, læser og sletter hver enkelt med fungerende kode.

  • 🍪 Hvad cookies er: En cookie er en lille fil på op til 4 KB, som serveren gemmer på klienten, og som returneres ved hver senere anmodning.
  • 🗄️ Hvad sessioner er: En session lagrer data på serveren under et unikt ID, der opbevares i $_SESSION-arrayet og refereres til af en sessionscookie.
  • 🆚 Nøgleforskel: Cookies findes på klienten og kan indeholde små, ikke-følsomme data; sessioner findes på serveren og indeholder større eller private data.
  • 🛠️ Oprettelse af cookies: setcookie() sætter et navn, en værdi og valgfrie flag for udløb, sti, domæne, sikker og httponly før HTML-output.
  • 📝 Oprettelse af sessioner: session_start() starter en session, hvorefter du læser og skriver værdier gennem det superglobale array $_SESSION.
  • 🗑️ Gøre rent: Udløber en cookie ved at indstille et tidligere tidspunkt; afslut en session med session_destroy() eller ryd én værdi med unset().
  • 🤖 AI Assist: AI-værktøjer kan implementere sikker sessionshåndtering og markere cookie- eller sessionssvagheder i eksisterende PHP-kode.

PHP-cookies og -sessioner

Hvad er Cookie?

En cookie er en lille fil med en maksimal størrelse på 4 KB, som webserveren gemmer på klientcomputeren.

Når en cookie er blevet indstillet, returnerer alle sideanmodninger, der følger, cookienavnet og -værdien.

En cookie kan kun læses fra det domæne, den er udstedt fra. For eksempel kan en cookie, der bruger domænet www.guru99.com, ikke læses fra domænet. career.guru99.com.

De fleste af webstederne på internettet viser elementer fra andre domæner, såsom annoncering. Domænerne, der betjener disse elementer, kan også indstille deres egne cookies. Disse er kendt som tredjepartscookies.

En cookie oprettet af en bruger kan kun være synlig for dem. Andre brugere kan ikke se dens værdi.

De fleste webbrowsere har muligheder for at deaktivere cookies, tredjepartscookies eller begge dele.

Hvis dette er tilfældet, svarer PHP ved at sende cookie-tokenet i URL.

Diagrammet nedenfor illustrerer, hvordan cookies fungerer.

Hvad er Cookie

Her,

1) En bruger anmoder om en side, der gemmer cookies

2) Serveren sætter cookien på brugerens computer

3) Andre sideanmodninger fra brugeren vil returnere cookienavnet og -værdien

Hvorfor og hvornår skal man bruge cookies?

  • HTTP er en statsløs protokol; cookies giver os mulighed for at track programmets tilstand ved hjælp af små filer, der er gemt på brugerens computer. Stien, hvor cookies gemmes, afhænger af browseren. Internet Explorer gemmer dem normalt i mappen Midlertidige internetfiler.
  • Personalisering af brugeroplevelsen – dette opnås ved at give brugerne mulighed for at vælge deres præferencer. De efterfølgende sideforespørgsler er tilpasset baseret på de præferencer, der er angivet i cookies.
  • Tracking de sider, som en bruger har besøgt

Oprettelse af cookies

Lad os nu se på den grundlæggende syntaks, der bruges til at oprette en cookie.

<?php

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

?>

HER,

  • "Setcookie" er den PHP funktion bruges til at lave cookien.
  • "cookie_name" er navnet på den cookie, som serveren bruger, når den henter dens værdi fra arrayvariablen $_COOKIE. Det er obligatorisk.
  • "cookie_value" er cookiens værdi, og den er obligatorisk.
  • "[expiry_time]" er valgfri; den kan bruges til at indstille udløbstiden for cookien, f.eks. 1 time. Tidspunktet indstilles ved hjælp af PHP time()-funktionen plus eller minus et antal sekunder større end 0, dvs. time() + 3600 for 1 time.
  • "[cookie_path]" er valgfri; den kan bruges til at indstille cookie-stien på serveren. Den fremadrettede skråstreg "/" betyder, at cookien bliver gjort tilgængelig på hele domænet. Undermapper begrænser cookie-adgangen til underdomænet.
  • "[domæne]" er valgfrit; det kan bruges til at definere cookieadgangshierarkiet, dvs. www.cookiedomain.com betyder hele domænet, mens www.sub.cookiedomain.com begrænser cookie-adgangen til www.sub.cookiedomain.com og dets underdomæner.
  • "[sikker]" er valgfri; standardindstillingen er falsk. Den bruges til at bestemme, om cookien sendes via HTTPS, hvis den er indstillet til sand, eller HTTP, hvis den er indstillet til falsk.
  • "[httponly]" er valgfrit. Hvis den er indstillet til sand, vil klientsidescriptsprog som f.eks. JavaScript kan ikke tilgå cookien.

Bemærk: PHP setcookie-funktionen skal udføres før HTML-åbningstagget.

Lad os nu se på et eksempel, der bruger cookies.

Vi vil oprette et grundlæggende program, der giver os mulighed for at gemme brugernavnet i en cookie, der udløber efter tres sekunder.

Koden nedenfor viser implementeringen af ​​ovenstående eksempel "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

Henter cookieværdien

Opret en anden fil med navnet "cookies_read.php" med følgende kode.

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

Output:

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

Bemærk: $_COOKIE er en indbygget superglobal variabel i PHP. Den indeholder navnene og værdierne på alle de indstillede cookies.

Antallet af cookies og deres størrelse er begrænset af browseren, typisk omkring 50 cookies pr. domæne og 4KB pr. cookie.

Test af vores applikation. Lad os antage, at du har gemt dine PHP-filer i en phptuts-mappe.

  • Trin 1 – åbn din webbrowser og indtast URL http://localhost/phptuts/cookies_read.php

Henter cookieværdien

Bemærk: Kun et tomt array er blevet vist

  • Trin 2 – gennemse til URL http://localhost/phptuts/cookies.php

Henter cookieværdien

  • Trin 3 – skift tilbage til den første fane, og klik derefter på opdateringsknappen

Henter cookieværdien

Vent et minut, og klik derefter på opdateringsknappen igen. Hvilke resultater fik du?

Slet cookies

  • Hvis du vil ødelægge en cookie før dens udløbstid, så indstiller du udløbstiden til en tid, der allerede er gået.
  • Opret en ny fil med navnet cookie_destroy.php med følgende kode
<?php

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

?>
  • Gentag trin 1 til 3 fra ovenstående afsnit om hentning af cookieværdier.
  • Åbne URL http://localhost/phptuts/cookie_destroy.php
  • Skift til URL http://localhost/phptuts/cookies_read.phpHvilke resultater viser den?

Hvad er en session?

  • En session er en global variabel, der er gemt på serveren.
  • Hver session tildeles et unikt id, som bruges til at hente lagrede værdier.
  • Når en session oprettes, gemmes en cookie, der indeholder det unikke sessions-id, på brugerens computer og returneres til serveren ved hver anmodning. Hvis klientbrowseren ikke understøtter cookies, vises det unikke PHP-sessions-id i URL.
  • Sessioner har kapacitet til at lagre relativt store data sammenlignet med cookies.
  • Sessionsværdierne slettes automatisk, når browseren lukkes. Hvis du vil gemme værdierne permanent, skal du gemme dem i databasen.
  • Ligesom $_COOKIE-arrayvariablen gemmes sessionsvariabler i $_SESSION-arrayvariablen. Ligesom cookies skal sessionen startes før eventuelle HTML-tags.

Hvorfor og hvornår skal man bruge sessioner?

  • Du ønsker at gemme vigtige oplysninger såsom bruger-id'et mere sikkert på serveren, hvor ondsindede brugere ikke kan manipulere med dem.
  • Du ønsker at overføre værdier fra en side til en anden.
  • Du ønsker et alternativ til cookies i browsere, der ikke understøtter cookies.
  • Du ønsker at gemme globale variabler på en effektiv og mere sikker måde sammenlignet med at sende dem videre i URL.
  • Du er udvikletping en applikation som f.eks. en butikping indkøbsvogn, der midlertidigt skal lagre information med en kapacitet på over 4 KB.

Oprettelse af en session

For at oprette en session skal du først kalde PHP session_start-funktionen og derefter gemme dine værdier i arrayvariablen $_SESSION.

Lad os antage, at vi vil vide, hvor mange gange en side er blevet indlæst. Vi kan bruge en session til at gøre det.

Koden nedenfor viser, hvordan man opretter og henter værdier fra sessioner.

<?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

Ødelæggelse af sessionsvariabler

Funktionen session_destroy() bruges til at ødelægge hele PHP-sessionen.

Hvis du kun vil ødelægge et enkelt sessionselement, bruger du funktionen unset().

Koden nedenfor illustrerer, hvordan man bruger begge metoder.

<?php

session_destroy(); // destroy entire session

?>
<?php

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

?>

session_destroy fjerner alle sessionsdata, inklusive cookies tilknyttet sessionen.

`unset` frigiver kun de individuelle sessionsvariabler. Andre data forbliver intakte.

Ofte Stillede Spørgsmål

Cookies gemmer data i en lille fil i brugerens browser og sendes med hver anmodning. Sessioner gemmer data på serveren og sender kun en sessions-ID-cookie. Sessioner er sikrere for følsomme eller større data.

Som standard gemmer PHP sessionsdata som filer i den sti, der er angivet af session.save_path i php.ini, ofte systemets midlertidige mappe. Websteder med høj trafik skifter ofte til en database, Redis eller Memcached-handler.

Sæt HttpOnly-flaget så JavaScriptet kan ikke læse cookien, Secure-flaget, så det sendes kun via HTTPS, og en SameSite-attribut for at begrænse afsendelse på tværs af websteder. For sessioner skal ID'et genereres efter login.

Ja. AI kan generere et loginflow, der regenererer sessions-ID'et, indstiller sikre cookieflag, gemmer minimale data på serversiden og håndhæver timeouts. RevSe outputtet i forhold til dine sikkerhedskrav.

Ja. AI kan scanne for manglende HttpOnly- eller Secure-flag, risici ved sessionsfiksering, lagring af følsomme data i cookies og manglende ID-regenerering efter login og derefter foreslå den korrigerede kode.

Opsummer dette indlæg med: