PHP Manual
/
HTTP

Sessioner - servercookies i PHP

06. 11. 2019

Obsah článku

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.

Start af en session

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()!

Sikkerhed i forbindelse med sessioner

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).

Hentning af data fra en session

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.';
}

Lagring af data i session

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.

Sletning af sessioner

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().

Maksimal gyldighed af sessionen

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:

Anvendelse i PHP:

// serveren vil nu holde sessionen i op til 3600 sekunder = 1 time
ini_set('session.gc_maxlifetime', '3600');
// alle klienter (browsere) vil være
// session sendt med en gyldighed på præcis 3600 sekunder
session_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:

Související články

1.
5.
Status:
All systems normal.
2024