Sessionshantering är ett nyckelbegrepp i PHP som gör det möjligt för användarinformation att fortsätta på alla sidor på en webbplats eller app. I det här inlägget lär du dig grunderna i sessionhantering i PHP.
Vi börjar med en förklaring av hur sessioner fungerar och hur de är relaterade till cookies. Då tittar vi på några kodsedlar som visar hur man arbetar med sessioner. Du lär dig hur du skapar och förstör sessioner och hur du ändrar sessionsvariabler.
En session är en mekanism för att beställa information på olika webbsidor för att identifiera användare när de navigerar på en webbplats eller app. Undrar du varför sessioner behövs för en webbplats? För att se varför sessioner är nödvändiga måste vi gå tillbaka och se hur HTTP-protokollet är utformat för att fungera.
HTTP-protokollet är ett statlöst protokoll, vilket betyder att det inte finns någon möjlighet att en server kan komma ihåg en specifik användare mellan flera förfrågningar. När du till exempel öppnar en webbsida är servern bara ansvarig för innehållet på den begärda sidan. Så när du öppnar andra sidor på samma webbplats tolkar webbservern varje förfrågan separat, som om de inte var relaterade till varandra. Det finns inget sätt för servern att veta att varje förfrågan härstammar från samma användare.
Följande diagram visar HTTP-protokollet i ett nötskal.
I den här modellen, om du vill visa användarspecifik information, måste du autentisera en användare i varje förfrågan. Tänk om du var tvungen att skriva ditt användarnamn och lösenord på varje sida som visade din profilinformation! Ja, det skulle vara besvärligt och inte praktiskt alls, och det är där sessioner kommer in på bilden.
En session tillåter dig att dela information över de olika sidorna på en enda webbplats eller app, vilket hjälper till att upprätthålla tillståndet. Detta låter servern veta att alla förfrågningar kommer från samma användare, vilket gör det möjligt för webbplatsen att visa användarspecifik information och preferenser.
Låt oss snabbt gå igenom ett gemensamt inloggningsflöde för en webbplats för att förstå vad som händer bakom kulisserna.
PHPSESSID
cookie i svarhuvudet.PHPSESSID
kakhuvud. Om cookies tillåts av webbläsaren lagras det här PHPSESSID
cookie, som lagrar sessionens id som skickats av servern.PHPSESSID
kakan skickas tillbaka till servern. När servern kommer över PHPSESSID
cookie, kommer det att försöka initiera en session med den sessionen ID. Det gör det genom att ladda upp sessionen filen som skapades tidigare under sessioninitiering. Det kommer då att initiera den super-globala arrayvariabeln $ _SESSION
med de data som lagras i sessionsfilen.På så sätt bevaras användardata över flera förfrågningar, och användaren hålls inloggad under en session.
Följande diagram visar hur HTTP-protokollet fungerar med sessioner.
Nu när du har sett en kort introduktion till hur sessioner fungerar, skapar vi några praktiska exempel för att visa hur man skapar och manipulerar sessionsvariabler.
I det här avsnittet diskuterar vi hur du startar en session i PHP.
När du vill hantera sessionvariabler måste du se till att en session redan är igång. Det finns ett par sätt att starta en session i PHP.
session_start
FungeraDetta är den metod som du oftast ska se, där en session startas av session_start
fungera.
Det viktiga är att session_start
funktionen måste kallas i början av manuset innan någon utmatning skickas till webbläsaren. Annars kommer du att stöta på den ökända Headers är redan skickade
fel.
Om det finns behov av att använda sessioner i hela din ansökan, kan du också välja att starta en session automatiskt utan att använda session_start
fungera.
Det finns ett konfigurationsalternativ i php.ini fil som tillåter dig att starta en session automatiskt för varje förfrågan-session.auto_start
. Som standard är den inställd på 0
, och du kan ställa in det 1
för att aktivera automatisk startfunktion.
session.auto_start = 1
Å andra sidan, om du inte har tillgång till php.ini fil, och du använder Apache webbservern, kan du också ställa in den här variabeln med hjälp av .htaccess fil.
php_value session.auto_start 1
Om du lägger till ovanstående rad i .htaccess fil, som bör starta en session automatiskt i din PHP-applikation.
Som vi diskuterade tidigare skapar servern ett unikt nummer för varje ny session. Om du vill få ett session-id kan du använda session_id
funktion, som visas i följande kod.
Det borde ge dig den aktuella sessionen id. De session_id
funktionen är intressant eftersom det också kan ta ett argument - en session id. Om du vill ersätta det systemgenererade sessions-id med ditt eget, kan du skicka det till det första argumentet hos session_id
fungera.
Det är viktigt att notera att session_id
funktionen måste placeras före session_start
ring när du vill starta en session med ett anpassat sessions-ID.
I det här avsnittet undersöker vi hur du initierar sessionvariabler i PHP.
Som vi diskuterade tidigare, när en session har startat, $ _SESSION
super-globala matrisen initialiseras med motsvarande sessionsinformation. Som standard initieras den med en tom tabell och du kan lagra mer information genom att använda ett nyckelvärdespar.
Låt oss gå igenom följande exempelskript som visar hur man initierar sessionvariabler.
Som du kan se har vi startat en session i början av manuset med hjälp av session_start
fungera. Efter det har vi initierat ett par sessionvariabler. Slutligen har vi åtkomst till dessa variabler med hjälp av $ _SESSION
super global.
När du lagrar data i en session med hjälp av $ _SESSION
super globalt lagras den till slut i en motsvarande sessionsfil på servern som skapades när sessionen startades. På så sätt delas sessionen data över flera förfrågningar.
Som vi diskuterade delas sessioninformationen över förfrågningar, och sålunda kan sessionens variabler initialiserade på en sida också nås från andra sidor tills sessionen löper ut. I allmänhet utgår en session när webbläsaren är stängd.
Du kan ändra eller ta bort sessionvariabler som skapades tidigare i applikationen på samma sätt som för vanliga PHP-variabler.
Låt oss se hur du ändrar sessionsvariablerna.
I ovanstående skript har vi kontrollerat om $ _SESSION [ 'count']
variabel sätts i första hand. Om den inte är inställd, ställer vi den på 1
, annars ökar vi det med 1
. Så, om du uppdaterar den här sidan flera gånger, bör du se att räknaren ökas med en varje gång!
Om du däremot vill ta bort en sessionsvariabel kan du använda oskränkt
funktion, som visas i följande kod.
Således kan du inte längre komma åt $ _SESSION [ 'logged_in_user_id']
variabel som den raderas av oskränkt
fungera. Så det är hur du kan ändra sessionsinformationen.
I det här avsnittet ser vi hur du kan förstöra en session. I det föregående avsnittet diskuterade vi oskränkt
funktion, som används om du vill radera specifika sessionsvariabler. Å andra sidan, om du vill radera all sessionsrelaterad data på en gång kan du använda session_destroy
fungera.
Låt oss försöka förstå hur det fungerar med hjälp av följande exempel.
De session_destroy
funktionen raderar allt som lagras i den aktuella sessionen. Således ser du ett tomt $ _SESSION
variabel från efterföljande förfrågningar eftersom sessionsdata som lagrades på disken togs bort av session_destroy
fungera.
Generellt skulle du använda session_destroy
funktion när användaren loggas ut.
I den här artikeln har vi utforskat grunderna i sessionhantering i PHP. Det är ett nyckelbegrepp som gör att du kan fortsätta information på webbsidor.
I den första halvan av artikeln diskuterade vi de grundläggande begreppen i sessioner, och senare skapade vi några PHP-exempel för att visa hur du kan skapa och förstöra sessioner samt manipulera sessionsvariabler.