Ofta behöver vi lagra mer information i cookies, men den maximala gränsen för cookies är 4 kB, vilket inte är mycket. Sessions löser detta problem genom att lagra data på webbservern och endast lagra en kort identifierare identifierare i klientens webbläsare för att avgöra vilka data som tillhör vilken klient.
Innan vi kan arbeta med sessioner måste vi först starta dem. Detta görs genom att anropa funktionen session_start()
direkt i början av skriptet:
session_start();
Stark varning: ingen HTML-kod får exekveras innan funktionen
session_start()
anropas!
Sessionens innehåll lagras på servern och endast identifieraren skickas till klientens webbläsare, så användaren kan inte veta vad som lagras i sessionen. Det enda sätt på vilket skriptet kan påverka användaren är genom att radera identifieraren (varpå skriptet genererar en ny).
Alla sessioner lagras i den superglobala variabeln $_SESSION
och kan genomgås som en array.
Namnet på den inloggade användaren kan till exempel hämtas genom att skriva:
echo $_SESSION['användare'];
Obs: Sessionen finns kanske inte alltid (till exempel om du är en ny användare). Därför bör vi alltid kontrollera om det finns en sådan innan vi tar upp en artikel och vid behov erbjuda ett alternativt felmeddelande.
if (isset($_SESSION['användare']) && $_SESSION['användare']) {echo 'Inloggad användare:' . $_SESSION['användare'];} else {echo 'Ingen har loggat in.';}
Sparandet sker som en enkel lagring av data i en variabel:
$_SESSION['användare'] = 'Honzik';
Webbservern tar hand om det tekniska tillhandahållandet av korrekt lagring på servern och sändning av identifieraren till användaren.
Enskilda värden kan raderas separat enligt nyckeln:
unset($_SESSION['användare']);
Eller alternativt alla tillgängliga sessioner:
unset($_SESSION);
Observera: Om du raderar en specifik session töms inte nyckelvärdet, utan nyckeln raderas helt och hållet. Därför kommer en felvarning att skickas ut om man försöker läsa en icke-existerande nyckel. Vi kan alltid enkelt verifiera att en nyckel finns med funktionen
isset()
.
Varje sparad session har en gräns för hur länge den sparas på servern. PHP innehåller direkt ett cronskript som regelbundet raderar gamla sessioner.
Standardvärdet är vanligtvis 1440 sekunder
, vilket är 24 minuter
.
Värdet måste ökas på två ställen:
php.ini
anges den maximala giltighetslängden som servern kommer att behålla. Värdet fastställs av direktivet session.gc_maxlifetime
,Användning i PHP:
// servern kommer nu att hålla sessionen i upp till 3600 sekunder = 1 timme.ini_set('session.gc_maxlifetime', '3600');// alla klienter (webbläsare) kommer att vara// sessionen skickas med en giltighet på exakt 3600 sekundersession_set_cookie_params(3600);session_start(); // vi kan starta 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: ... | sv