Så här använder du sessioner och sessionvariabler i PHP

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.

Vad är en session i PHP?

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.

Logga in flöde med sessioner och cookies

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.

  1. En användare öppnar inloggningssidan för en webbplats.
  2. Efter att ha skickat inloggningsformuläret autentiserar en server i den andra änden begäran genom att validera inloggningsuppgifterna som angivits.
  3. Om användaruppgifterna som anges av användaren är giltiga skapar servern en ny session. Servern genererar ett unikt slumptal, som kallas ett session-id. Det skapar också en ny fil på servern som används för att lagra den sessionsspecifika informationen.
  4. Därefter skickas ett sessions-id tillbaka till användaren, tillsammans med vilken resurs som begärdes. Bakom kulisserna skickas detta sessions id i PHPSESSID cookie i svarhuvudet.
  5. När webbläsaren mottar svaret från servern kommer den över PHPSESSID kakhuvud. Om cookies tillåts av webbläsaren lagras det här PHPSESSID cookie, som lagrar sessionens id som skickats av servern.
  6. För efterföljande förfrågningar 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.

Så här startar du en session

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.

Använd session_start Fungera

Detta ä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.

Starta automatiskt en session

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.

Så här får du en session ID

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.

Hur man skapar sessionvariabler

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.

Så här ändrar du och tar bort sessionvariabler

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.

Hur man förstör en session

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.

Slutsats

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.