Ofte har vi brug for at gemme flere oplysninger i cookies, men den maksimale grænse for cookies er 4 kB, hvilket ikke er meget. Sessions løser dette problem ved at lagre dataene på webserveren og kun gemme en kort identifikator i klientens browser for at fortælle, hvilke data der tilhører hvilken klient.
Før vi kan arbejde med sessioner, skal vi først starte dem. Dette gøres ved at kalde funktionen session_start()
lige i starten af scriptet:
session_start();
Stærk advarsel: der må ikke udføres output til HTML-kode før kald af funktionen
session_start()
!
Indholdet af sessionen gemmes på serveren, og kun identifikatoren sendes til klientens browser, så brugeren kan ikke vide, hvad der er gemt i sessionen. Den eneste måde, scriptet kan påvirke brugeren på, er ved at slette identifikatoren (hvorefter scriptet genererer en ny).
Alle sessioner gemmes i den superglobale variabel $_SESSION
og kan gennemløbes som et array.
F.eks. kan navnet på den aktuelt loggede bruger hentes ved at skrive:
echo $_SESSION['bruger'];
Bemærk: Session eksisterer ikke altid (f.eks. hvis du er en ny bruger). Derfor bør vi altid kontrollere, om de findes, før vi opfører dem på listen, og om nødvendigt tilbyde en alternativ fejlmeddelelse.
if (isset($_SESSION['bruger']) && $_SESSION['bruger']) {echo 'Logget ind som bruger:' . $_SESSION['bruger'];} else {echo 'Der er ingen, der er logget ind.';}
Gemning sker som en simpel lagring af data i en variabel:
$_SESSION['bruger'] = 'Honzik';
Webserveren sørger for den tekniske sikring af korrekt lagring på serveren og for at sende identifikatoren til brugeren.
Vi kan slette de enkelte værdier separat i henhold til nøglen:
unset($_SESSION['bruger']);
Eller alternativt alle tilgængelige sessioner:
unset($_SESSION);
Bemærk: Hvis du sletter en bestemt session, tømmes nøgleværdien ikke, men nøglen slettes helt. Derfor vil der blive givet en fejladvarsel, når der forsøges at læse en nøgle, der ikke eksisterer. Vi kan altid nemt verificere eksistensen af en nøgle med funktionen
isset()
.
Hver gemte session har en grænse for, hvor længe den vil blive gemt på serveren. PHP indeholder direkte et cron-script, der med jævne mellemrum sletter gamle sessioner.
Standardværdien er normalt 1440 sekunder
, hvilket svarer til 24 minutter
.
Forøgelsen af værdien skal ske 2 steder:
php.ini
er den maksimale gyldighedslængde, som serveren vil opretholde, angivet. Værdien er fastsat af direktivet session.gc_maxlifetime
,Anvendelse i PHP:
// serveren vil nu holde sessionen i op til 3600 sekunder = 1 timeini_set('session.gc_maxlifetime', '3600');// alle klienter (browsere) vil være// session sendt med en gyldighed på præcis 3600 sekundersession_set_cookie_params(3600);session_start(); // vi kan starte sessionen!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | da