Sessies en sessievariabelen gebruiken in PHP

Sessie afhandeling is een sleutelbegrip in PHP dat ervoor zorgt dat gebruikersinformatie aanwezig blijft op alle pagina's van een website of app. In dit bericht leer je de basisprincipes van sessie-afhandeling in PHP. 

We beginnen met een uitleg over hoe sessies werken en hoe ze verband houden met cookies. Vervolgens bekijken we enkele codefragmenten die laten zien hoe u met sessies kunt werken. U leert hoe u sessies kunt maken en vernietigen en hoe u sessievariabelen kunt wijzigen.

Wat is een sessie in PHP?

Een sessie is een mechanisme om informatie op de verschillende webpagina's te bewaren om gebruikers te identificeren terwijl ze door een site of app navigeren. Vraag je je af waarom sessies nodig zijn voor een website? Om te zien waarom sessies noodzakelijk zijn, moeten we teruggaan en zien hoe het HTTP-protocol is ontworpen om te werken.

Het HTTP-protocol is een stateloos protocol, wat betekent dat er op geen enkele manier een server een specifieke gebruiker kan onthouden tussen meerdere verzoeken. Wanneer u bijvoorbeeld een webpagina opent, is de server alleen verantwoordelijk voor het leveren van de inhoud van de gevraagde pagina. Dus wanneer u andere pagina's van dezelfde website bezoekt, interpreteert de webserver elk verzoek afzonderlijk, alsof ze geen verband houden met elkaar. Er is geen manier voor de server om te weten dat elk verzoek afkomstig is van dezelfde gebruiker.

Het volgende diagram toont het HTTP-protocol in een notendop.

Als u in dit model gebruikerspecifieke informatie wilt weergeven, moet u in elk verzoek een gebruiker verifiëren. Stel je voor dat je je gebruikersnaam en wachtwoord moest typen op elke pagina die je profielinformatie weergeeft! Ja, het zou omslachtig en helemaal niet praktisch zijn, en dat is waar sessies in beeld komen.

Met een sessie kunt u informatie delen op de verschillende pagina's van een enkele site of app, waardoor het helpt de status te behouden. Hierdoor weet de server dat alle verzoeken afkomstig zijn van dezelfde gebruiker, waardoor de site gebruikerspecifieke informatie en voorkeuren kan weergeven.

Aanmeldingsstroom met sessies en cookies

Laten we snel een gemeenschappelijke inlogprocedure voor een website doorlopen om te begrijpen wat er achter de schermen gebeurt.

  1. Een gebruiker opent de inlogpagina van een website.
  2. Nadat u het aanmeldingsformulier hebt verzonden, verifieert een server aan de andere kant het verzoek door de ingevoerde legitimatiegegevens te valideren.
  3. Als de inloggegevens die de gebruiker heeft ingevoerd geldig zijn, maakt de server een nieuwe sessie. De server genereert een uniek willekeurig nummer, dat een sessie-ID wordt genoemd. Het maakt ook een nieuw bestand op de server aan dat wordt gebruikt om de sessiespecifieke informatie op te slaan.
  4. Vervolgens wordt een sessie-ID doorgegeven aan de gebruiker, samen met de gevraagde bron. Achter de schermen wordt deze sessie-ID verzonden in de PHPSESSID cookie in de antwoordkop.
  5. Wanneer de browser het antwoord van de server ontvangt, komt deze de PHPSESSID cookie header. Als cookies zijn toegestaan ​​door de browser, wordt dit opgeslagen PHPSESSID cookie, waarin de sessie-ID wordt opgeslagen die door de server is doorgegeven.
  6. Voor volgende verzoeken, de PHPSESSID cookie wordt doorgegeven aan de server. Wanneer de server de PHPSESSID cookie, zal het proberen een sessie met die sessie-id te initialiseren. Dit gebeurt door het sessiebestand te laden dat eerder is gemaakt tijdens de initialisatie van de sessie. Vervolgens wordt de superalgemene array-variabele geïnitialiseerd $ _SESSION met de gegevens die zijn opgeslagen in het sessiebestand.

Op deze manier worden de gebruikersgegevens over meerdere verzoeken bewaard en wordt de gebruiker gedurende een sessie ingelogd gehouden.

Het volgende diagram toont hoe het HTTP-protocol met sessies werkt.

Nu u een korte introductie hebt gezien van hoe sessies werken, maken we enkele praktische voorbeelden om te demonstreren hoe u sessievariabelen maakt en manipuleert.

Hoe een sessie te starten

In deze sectie bespreken we hoe u een sessie in PHP kunt starten.

Wanneer u met sessievariabelen te maken krijgt, moet u ervoor zorgen dat een sessie al is gestart. Er zijn een aantal manieren om een ​​sessie in PHP te starten.

Gebruik de session_start Functie

Dit is de methode die u het vaakst ziet, waarbij een sessie wordt gestart door de session_start functie.

Het belangrijkste is dat de session_start De functie moet aan het begin van het script worden aangeroepen voordat een uitvoer naar de browser wordt verzonden. Anders kom je de beruchte tegen Headers zijn al verzonden fout.

Start automatisch een sessie

Als het nodig is om sessies gedurende uw toepassing te gebruiken, kunt u zich ook aanmelden om een ​​sessie automatisch te starten zonder de. Te gebruiken session_start functie.

Er is een configuratieoptie in de php.ini bestand waarmee u automatisch een sessie voor elke aanvraag kunt starten-session.auto_start. Standaard staat deze ingesteld op 0, en je kunt het instellen 1 om de automatische startfunctionaliteit in te schakelen.

session.auto_start = 1

Aan de andere kant, als u geen toegang hebt tot de php.ini bestand, en u gebruikt de Apache-webserver, u kunt deze variabele ook instellen met behulp van de .htaccess het dossier.

php_value session.auto_start 1

Als u de bovenstaande regel toevoegt in de .htaccess bestand, dat een sessie automatisch in uw PHP-toepassing moet starten.

Hoe een Sessie-ID te krijgen

Zoals we eerder hebben besproken, maakt de server een uniek nummer voor elke nieuwe sessie. Als u een sessie-ID wilt ontvangen, kunt u de session_id functie, zoals getoond in het volgende fragment.

Dat zou u de huidige sessie-id moeten geven. De session_id De functie is interessant omdat het ook één argument kan bevatten - een sessie-id. Als u de door het systeem gegenereerde sessie-id wilt vervangen door uw eigen id, kunt u deze aan het eerste argument van de session_id functie.

Het is belangrijk op te merken dat de session_id functie moet vóór de worden geplaatst session_start oproep wanneer u een sessie wilt starten met een aangepaste sessie-ID.

Sessieve variabelen maken

In deze sectie zullen we onderzoeken hoe sessievariabelen in PHP kunnen worden geïnitialiseerd.

Zoals we eerder hebben besproken, is het een keer dat een sessie is gestart, de $ _SESSION superargigere array wordt geïnitialiseerd met de bijbehorende sessie-informatie. Standaard is deze geïnitialiseerd met een lege array en kunt u meer informatie opslaan met behulp van een sleutel / waarde-paar.

Laten we het volgende voorbeeldscript bekijken dat laat zien hoe u sessievariabelen initialiseert.

Zoals u kunt zien, hebben we een sessie aan het begin van het script gestart met behulp van de session_start functie. Daarna hebben we een aantal sessievariabelen geïnitialiseerd. Ten slotte hebben we toegang tot die variabelen met behulp van de $ _SESSION super-global.

Wanneer u de gegevens in een sessie opslaat met behulp van de $ _SESSION super-globaal, wordt het uiteindelijk opgeslagen in een overeenkomstig sessiebestand op de server die werd aangemaakt toen de sessie werd gestart. Op deze manier worden de sessiegegevens gedeeld over meerdere verzoeken.

Zoals we hebben besproken, wordt de sessie-informatie gedeeld over verzoeken, en dus kunnen de sessievariabelen geïnitialiseerd op één pagina ook worden geopend vanaf andere pagina's, totdat de sessie verloopt. Over het algemeen verloopt een sessie wanneer de browser wordt gesloten.

Sessieve variabelen wijzigen en verwijderen

U kunt sessievariabelen die eerder in de toepassing zijn gemaakt, op dezelfde manier wijzigen of verwijderen als voor normale PHP-variabelen.

Laten we kijken hoe de sessievariabelen kunnen worden gewijzigd.

In het bovenstaande script hebben we gecontroleerd of het $ _SESSION [ 'count'] variabele wordt in de eerste plaats ingesteld. Als dit niet is ingesteld, stellen we het in 1, anders zullen we het verhogen met 1. Dus als u deze pagina meerdere keren ververst, zou u moeten zien dat de teller telkens met één wordt opgehoogd! 

Aan de andere kant, als u een sessievariabele wilt verwijderen, kunt u de .variabele gebruiken ongezet functie, zoals getoond in het volgende fragment.

U hebt dus geen toegang meer tot de $ _SESSION [ 'logged_in_user_id'] variabele als het wordt verwijderd door de ongezet functie. Dus dat is hoe je de sessie-informatie kunt wijzigen.

Hoe een sessie te vernietigen

In deze sectie zullen we zien hoe u een sessie kunt vernietigen. In het vorige gedeelte hebben we het besproken ongezet functie, die wordt gebruikt als u specifieke sessievariabelen wilt verwijderen. Aan de andere kant, als u alle sessiegerelateerde gegevens in één keer wilt verwijderen, kunt u de session_destroy functie.

Laten we proberen te begrijpen hoe het werkt door het volgende voorbeeld te gebruiken.

De session_destroy functie verwijdert alles dat is opgeslagen in de huidige sessie. Zo ziet u een lege $ _SESSION variabele van de volgende aanvragen omdat de sessiegegevens die op de schijf waren opgeslagen, door de variabele zijn verwijderd session_destroy functie.

Over het algemeen zou u de session_destroy functie wanneer de gebruiker wordt uitgelogd.

Conclusie

In dit artikel hebben we de basis van sessie-afhandeling onderzocht in PHP. Het is een sleutelconcept waarmee u informatie op webpagina's kunt bewaren.

In de eerste helft van het artikel hebben we de basisbegrippen van sessies besproken en later hebben we een paar PHP-voorbeelden gemaakt om te demonstreren hoe je sessies kunt maken en vernietigen en sessievariabelen kunt manipuleren..