Hantera sessions i PHP (del 1/2)
Förord
Session är faktiskt något som är relativt nytt i PHP, det kom nämligen inte med förens i version fyra. Ofta vill man bevara data mellan flera olika webbsidor, som kanske en besökare har knappat in ett formulär. Om man till exempel har ett medlemssystem så behöver man normalt lagra användarens id-nummer eller användarnamn för att sedan kunna hämta ut specifika databasposter för just den användaren. Det är här man får användning av sessions. Denna artikel är uppdelad i två, eftersom jag tänkte att jag i denna artikel ska beskriva hur det hela går till, vad funktioner gör och vad det finns för alternativ och så vidare, och i nästa del tänker jag ta ett praktexempel (inloggningssystem).Innehåll
»»
»
»
»
»
Relaterade artiklar
» Hantera sessions i PHP del (2/2)
Allmänt om sessions
En session kan liknas vid en temporär cookie, de finns där o håller reda på besökaren med ett unikt SESSION-ID, men eftersom den bara är temporär, så raderas den så fort besökaren stänger ner sin webbläsare eller lämnar webbplatsen. En session sparas dock på servern, vilket medför att om en besökare har cookies inaktiverat på sin dator så fungerar sessions ändå. Innan man börjar programmera i PHP med sessions måste man dock se till att php.ini är rätt konfigurerat (får du underliga felmeddelanden i koden bör du kontrollera inställningarna). Har du en ny version av PHP (i skrivande stund 4.3.0), så behöver du dock inte tänka på detta.
Starta session
När man ska börja använda sig av sessioner på en webbsida så är det viktigt att du alltid startar sessionmotorn först (som standard är den avstängd). Detta görs med en enkel funktion som du måste placera överst på sidan. När jag skriver ”överst på sidan” så menar jag att du måste placera koden innan någon HTML-kod sänds till klienten, för annars får du ett vackert felmeddelande. Funktionen för att starta sessionmotorn ser ut så här:
session_start();
?>
Nu är motorn startad och färdig för att användas. Vad jag vet så finns det ingen funktion för att stänga av sessionmotorn (likt en som du stänger av MySQL anslutningen med), så därför använder vi inte det.
Registrera en session
När nu sessionmotorn är startad så kan vi börja med att registrera en variabel. Enklast är att först skapa en helt vanlig variabel med den information man önskar att den skall innehålla, och sedan registrerar man variabeln så den blir åtkomlig på samtliga sidor. Exempel:
$min_variabel = ”data”;
session_register(”min_variabel”);
?>
Sådär, då var variabeln slutligen registrerad. Observera att jag inte använder något $-tecken när jag registrerar variabeln, normalt sett så brukar man inte använda det där.
Döda en session
Ibland så vill man kanske ta bort en session, det är ju onödigt att en session som inte används står o tynger servern. Eller om man har ett inloggningssystem så vill man ju givetvis att en användare även ska kunna logga ut när han/hon loggat in. Det finns två olika sätt för att döda alla sessionvariabler för en användare, exempel:
session_destroy();
?>
Nu kommer alla variabler satta på den specifika användaren att raderas. Men som jag sa så finns det två näst intill identiska funktionen för ändamålet, och den andra ser ut så här:
session_unset();
?>
Denna funktion gör som sagt precis samma sak som den övre, varför man har valt att ha två olika funktioner som utför samma sak vet jag faktiskt inte, men någon logisk förklaring finns det säkert! Om man kanske inte vill ta bort alla sessionvariabler för en besökare, så kan man givetvis radera dem en efter en också, detta görs med funktionen ”session_unregister();”. Exempel:
session_unregister(”min_variabel”);
?>
På så vis raderas alltså variabeln ”$min_variabel”, har man skapat fler variabler så finns givetvis de kvar.
Hämta ut värdet
För att hämta och skriva ut värdet på en variabel så behöver man inte använda sig av någon speciell funktion. Det görs på ett mycket enkelt sätt med hjälp av variabeln ”$_SESSION[”session_variabel_namn”];”. Det som man kan kontrollera är att om variabel verkligen är registrerad, detta kan man kolla med funktionen ”session_is_registered();”, för annars skrivs ett felmeddelande ut, och det är ju aldrig speciellt snyggt. Exempel för att skriva ut en skapad variabel:
if(!(session_is_registered('min_variabel')))
{
echo $_SESSION[“min_variable”];
}
else
{
echo “Variabeln är inte registrerad!
\n”;
}
?>
Vi kontrollerar alltså först om variabeln ”$min_variabel” är registrerad eller inte med hjälp av en if-sats, om så är fallet så skrivs värdet på variabeln ut, annars så skickar vi ut ett felmeddelande.
I nästa och den sista artikeln i denna serie så ska jag visa hur man kan använda sig av sessions i ett inloggningssystem, hur man loggar in en användare, loggar ut, ändrar personliga uppgifter och så vidare! Håll ut!
Jonathan Wening
session_unset() tar bort allt, medan session_destroy() bara tar bort datan kopplad till den nuvarande sessionen, den tar inte bort globala variablar kopplade till sessionen eller tar bort en satt cookie.