Sessions for begyndere

At få startet på sessions kan for mange være en opgave som er utrolig omfangsrig.
Det vil derfor kunne betale sig at finde ud af hvad sessions i virkeligheden er og hvad de kan.
Artiklen her er baseret på at du i forvejen kender til det mest basale vedrørende PHP og HTML.

Artiklen er opdelt således:
  1. Hvad er sessions?
  2. Hvordan tilføjer jeg så værdier?
  3. Hvad er det lige med den der session_start()?
  4. Vis mig et brugbart eksempel, tak!
  5. Hvad hvis jeg ikke vil gemme navnet i sessionen?
  6. Hvad kan jeg bruge sessions til?

Hvad er sessions?

En besøgende på dit website vil få oprettet en cookie på sin computer. Den cookie indeholder basalt set blot en unik streng der identificerer computeren på website. På din server, hvor dit website er placeret, vil der ligeledes være oprettet en fil, der kan tilknyttes denne unikke streng. Denne fil er så din session.
Placeringen af denne fil samt navnet på den unikke streng er i første omgang ikke relevant. Selvom disse kan tilgås vil der sjældent i simple eksempler slet ikke være behov for at tilgå dem.

Sessionen kan så gemme alle slags værdier. Dette er dog en sandhed med modifikationer, men begrænsninger vil der være. Dem vil vi ikke støde på her i artiklen.
Alle de værdier vil kun knytte sig til den bruger der besøger dit website. Når brugeren så har været inaktiv tilstrækkelig længe vil oplysningerne gå tabt.

Hvordan tilføjer jeg så værdier?

En session er egentlig blot et array.
Et eksempel på at tildele et array værdier:

<?php
    $mitArray 
= array();
    
$mitArray["navn"] = "Jens Jensen";
    
$mitArray["email"] = "jens@example.org";
    
    echo 
$mitArray["navn"]; // udskriver Jens Jensen til browseren
?>

Overordnet set, fungerer sessions på samme måde. Sessions skal dog altid tilgås via et bestemt variabelnavn (kaldet en superglobal variabel) og navnet på den er $_SESSION.
Så nu prøver vi at lave selvsamme eksempel som før, bare med sessions:

<?php
    $_SESSION
["navn"] = "Jens Jensen";
    
$_SESSION["email"] = "jens@example.org";
    
    echo 
$_SESSION["navn"]; // udskriver Jens Jensen til browseren
?>

Den eneste forskel der reelt set er i de to foregående eksempler er at indholdet i $mitArray er gået tabt, når sidens behandling er færdig, mens $_SESSION indholdet er gemt i din session fil og kan nu tilgås fra alle de sider du åbner hvor du også spørger på $_SESSION variablen.

Hvad er det lige med den der session_start()?

Hvis du har prøvet eksemplerne ovenfor af, vil du sikkert også have oplevet at $_SESSION eksemplet alene ikke virker efter hensigten.
For at dine sessions skal virke, skal du først fortælle PHP at du vil benytte dig af sessions. Og det gør du med funktionen session_start().

session_start() er funktion som skal kaldes inden andet output bliver sendt ud til browseren - og det er vigtgt. Det vil sige at skriver du HTML ud, en tom linie eller noget andet, vil du få en fejl fra PHP og du kan dermed ikke længere tilgå dine sessions.
Den forkerte måde:

<html>
    <head>
        <title>Min side</title>
    </head>
    <body>
    <?php
    session_start
();
    
?>
    </body>
</html>

Den forkerte måde vil resultere i fejl fra PHP. Det finder du efterhånden ud af som du får prøvet mulighederne af, men ellers er det meget simpelt at gøre det på den rigtige måde.

Og den rigtige måde:

<?php
    session_start
();
?>
<html>
    <head>
        <title>Min side</title>
    </head>
    <body>
    </body>
</html>

Så er din side faktisk klar til at benytte sig af sessions.

Vis mig et brugbart eksempel, tak!

Nu er det mest basale på plads, så nu er vi klar til at sætte og bruge sessions.
Til det formål laver vi to PHP filer; session_set.php og session_get.php

(session_set.php)
<?php
    session_start
();
    
$_SESSION["navn"] = "Jens Jensen";
?>

Når jeg nu har besøgt session_set.php har jeg dannet min session og givet den indhold. Det vil jeg gerne hente frem og bruge på en anden side.

(viskagen.php)
<?php
    session_start
();
    echo 
"Hej ".$_SESSION["navn"]; // Dette vil skrive: Hej Jens Jensen
?>

Temmelig simpelt.

Hvad hvis jeg ikke vil gemme navnet i sessionen?

Hvis du f.eks. er igang med at udvikle et brugersystem, en indkøbskurv eller måske bare ikke længere har behov for noget af det data du har oprettet i din session, kan du med fordel bruge unset() til fjerne bestemte elementer fra din session:

<?php
    session_start
();
    unset(
$_SESSION["navn"]); //fjerner session variablen 'navn'.
?>

Det er rimelig nemt at bruge sessions!

Hvad kan jeg bruge sessions til?

Sessions bliver praktisk talt brugt hele tiden.
Indkøbskurve, brugersystemer, tracking, ja - alt hvad du har behov for, når dataene skal genbruges.

Sessions kan være simple som de eksempler vist her i artiklen, men f.eks. indkøbskurve er lidt mere komplekse. Ikke fordi sessions i sig selv er noget specielt, det er stadig kun et globalt array.
Og når du laver en indkøbskurv vil du benytte dig af et multidimensionelt array.
Et eksempel på tilføjelse af en varelinie til en indkøbskurv:

<?php

    
//Vi starter vores sessions
    
session_start();
    
    
//så skal vi lige vide hvilken vare kunden vil have og hvor mange han skal have
    
$vareId $_GET["vareId"];
    
$antal $_GET["antal"];
    
    
//her kontrolleres det om kunden allerede har varen og hvis det er tilfældet tillægges antallet til den eksisterende værdi.
    //ellers oprettes varelinien blot med værdien af antal
    
if(isset($_SESSION["basket"][$vareId]))
        
$_SESSION["basket"][$vareId] += $antal;
    else
        
$_SESSION["basket"][$vareId] = $antal;

?>

Det gik jo ret smertefrit.
Men jeg skal jo også hente det ud?
Det løser vi lige:

<?php

    
//Vi starter vores session session_start();

    // så looper vi dem igennem og viser dem til kunden
 
    
foreach($_SESSION["basket"] as $vareId => $antal): ?> <div 
    class="vareLinie"> <?php echo $vareId?> - <?php echo $antal?> </div>

    <?php endforeach; ?>

?>

Overordnet er det nogle meget simple eksempler, men formålet var jo ikke at lære dig at lave en indkøbskurv; men at lære dig at benytte sessions så du selv kan regne ud hvordan du kan lave en.