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 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.
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.combetyder hele domænet, menswww.sub.cookiedomain.combegrænser cookie-adgangen tilwww.sub.cookiedomain.comog 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
Bemærk: Kun et tomt array er blevet vist
- Trin 2 – gennemse til URL http://localhost/phptuts/cookies.php
- Trin 3 – skift tilbage til den første fane, og klik derefter på opdateringsknappen
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.




