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.
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.
Laten we snel een gemeenschappelijke inlogprocedure voor een website doorlopen om te begrijpen wat er achter de schermen gebeurt.
PHPSESSID
cookie in de antwoordkop.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.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.
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.
session_start
FunctieDit 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.
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.
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.
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.
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.
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.
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..