Slik bruker du økter og øktvariabler i PHP

Sessionhåndtering er et nøkkelbegrep i PHP som gjør det mulig for brukerinformasjon å fortsette på alle sidene på et nettsted eller en app. I dette innlegget lærer du grunnleggende om økt behandling i PHP. 

Vi starter med en forklaring på hvordan øktene fungerer og hvordan de er relatert til informasjonskapsler. Deretter ser vi på noen kodestykker som viser hvordan man arbeider med økter. Du lærer hvordan du lager og ødelegger økter, og hvordan du endrer sesjonsvariabler.

Hva er en sesjon i PHP?

En økt er en mekanisme for å vedvare informasjon på tvers av de ulike nettsidene for å identifisere brukere når de navigerer på et nettsted eller en app. Lurer du på hvorfor økter er nødvendige for et nettsted? For å se hvorfor økter er nødvendige, må vi gå tilbake og se hvordan HTTP-protokollen er designet for å fungere.

HTTP-protokollen er en statsløs protokoll, noe som betyr at det ikke er noen måte en server kan huske en bestemt bruker mellom flere forespørsler. For eksempel, når du åpner en nettside, er serveren bare ansvarlig for å levere innholdet på den forespurte siden. Så når du åpner andre sider på samme nettside, tolker webserveren hver forespørsel separat, som om de ikke var tilknyttet hverandre. Det er ingen måte for serveren å vite at hver forespørsel stammer fra samme bruker.

Følgende diagram viser HTTP-protokollen i et nøtteskall.

I denne modellen, hvis du ønsket å vise brukerspesifikke opplysninger, må du godkjenne en bruker i hver forespørsel. Tenk deg om du måtte skrive inn brukernavn og passord på hver side som viste profilinformasjonen din! Ja, det ville være tungvint og ikke praktisk i det hele tatt, og det er der økter kommer inn på bildet.

En økt gir deg mulighet til å dele informasjon på tvers av de forskjellige sidene på et enkelt nettsted eller en app, og dermed bidrar det til å opprettholde staten. Dette lar serveren vite at alle forespørsler kommer fra samme bruker, slik at nettstedet kan vise brukerspesifikke opplysninger og preferanser.

Innloggingsflyt med økter og informasjonskapsler

La oss raskt gå gjennom en felles innloggingstrøm for et nettsted for å forstå hva som skjer bak kulissene.

  1. En bruker åpner innloggingssiden til et nettsted.
  2. Etter at innloggingsskjemaet er sendt, godkjenner en server på den andre enten forespørselen ved å validere legitimasjonsinformasjonen som ble oppgitt.
  3. Hvis legitimasjonene som er oppgitt av brukeren, er gyldige, oppretter serveren en ny økt. Serveren genererer et unikt tilfeldig tall, som kalles et sesjons-ID. Det oppretter også en ny fil på serveren som brukes til å lagre økspesifikke opplysninger.
  4. Deretter sendes et sesjons-ID tilbake til brukeren, sammen med hvilken ressurs som ble forespurt. Bak kulissene sendes dette sesjons-IDet i PHPSESSID informasjonskapsel i svarhodet.
  5. Når nettleseren mottar svar fra serveren, kommer den over PHPSESSID cookie header. Hvis informasjonskapsler er tillatt av nettleseren, lagres dette PHPSESSID cookie, som lagrer sessions-IDen som overføres av serveren.
  6. For etterfølgende forespørsler, vil PHPSESSID cookie sendes tilbake til serveren. Når serveren kommer over PHPSESSID cookie, vil det forsøke å initialisere en økt med den økte id. Det gjør det ved å laste inn øktfilen som ble opprettet tidligere under øktinitialisering. Den vil deretter initialisere den super-globale arrayvariabelen $ _SESSION med dataene lagret i øktfilen.

På denne måten blir brukerdataene bevart over flere forespørsler, og brukeren blir logget inn i løpet av en økt.

Følgende diagram viser hvordan HTTP-protokollen fungerer med økter.

Nå som du har sett en kort introduksjon til hvordan øktene fungerer, vil vi lage noen praktiske eksempler for å demonstrere hvordan du oppretter og manipulerer øktvariabler.

Slik starter du en sesjon

I denne delen diskuterer vi hvordan du starter en økt i PHP.

Når du vil håndtere øktvariabler, må du sørge for at en økt allerede er startet. Det er et par måter du kan starte en økt på i PHP.

Bruke session_start Funksjon

Dette er metoden du vil se oftest, hvor en økt er startet av session_start funksjon.

Det viktigste er at session_start funksjonen må kalles i begynnelsen av manuset, før noen utgang sendes til nettleseren. Ellers møter du den beryktede Overskrifter er allerede sendt feil.

Start automatisk en økt

Hvis det er behov for å bruke økter i hele søknaden, kan du også velge å starte en økt automatisk uten å bruke session_start funksjon.

Det er et konfigurasjonsalternativ i php.ini fil som lar deg starte en økt automatisk for hver forespørsel-session.auto_start. Som standard er den satt til 0, og du kan sette den til 1 for å aktivere automatisk oppstartsfunksjonalitet.

session.auto_start = 1

På den annen side, hvis du ikke har tilgang til php.ini fil, og du bruker Apache webserveren, kan du også sette denne variabelen ved hjelp av .htaccess fil.

php_value session.auto_start 1

Hvis du legger til linjen ovenfor i .htaccess fil, som bør starte en økt automatisk i PHP-applikasjonen.

Slik får du et økt-ID

Som vi diskuterte tidligere, oppretter serveren et unikt nummer for hver ny sesjon. Hvis du vil få et økt id, kan du bruke øktnummer funksjon, som vist i følgende utdrag.

Det burde gi deg gjeldende sesjons-ID. De øktnummer funksjonen er interessant ved at den også kan ta ett argument - en økt id. Hvis du vil erstatte det systemgenererte økt-ID med ditt eget, kan du levere det til det første argumentet til øktnummer funksjon.

Det er viktig å merke seg at øktnummer funksjonen må plasseres før session_start ring når du vil starte en økt med et egendefinert sessions-ID.

Hvordan opprette sesjonsvariabler

I denne delen vil vi undersøke hvordan du initialiserer sesjonsvariabler i PHP.

Som vi diskuterte tidligere, når en økt er startet, $ _SESSION super-globalt array initialiseres med tilhørende øktinformasjon. Som standard initialiseres det med et tomt utvalg, og du kan lagre mer informasjon ved å bruke et nøkkelverdi-par.

La oss gå gjennom følgende eksempelskript som viser hvordan du initialiserer sesjonsvariabler.

Som du kan se, har vi startet en økt i begynnelsen av scriptet ved hjelp av session_start funksjon. Etter det har vi initialisert et par øktvariabler. Til slutt har vi tilgang til disse variablene ved hjelp av $ _SESSION super-global.

Når du lagrer dataene i en økt ved hjelp av $ _SESSION super-global, lagres den til slutt i en tilsvarende sesjonsfil på serveren som ble opprettet når økten ble startet. På denne måten deles øktdataene over flere forespørsler.

Som vi diskuterte, blir sesjonsinformasjonen delt på forespørsler, og dermed kan sesjonsvariablene som er initialisert på en side, også åpnes fra andre sider, til sesjonen utløper. Vanligvis utløper en økt når nettleseren er stengt.

Slik endrer og sletter sesjonsvariabler

Du kan endre eller slette øktvariabler som er opprettet tidligere i programmet på samme måte som for vanlige PHP-variabler.

La oss se hvordan du endrer sesjonsvariablene.

I det ovennevnte skriptet har vi sjekket om $ _SESSION [ 'count'] variabel er satt i utgangspunktet. Hvis det ikke er satt, setter vi det på 1, ellers vil vi øke det med 1. Så, hvis du oppdaterer denne siden flere ganger, bør du se at telleren økes med en hver gang! 

På den annen side, hvis du vil slette en øktvariabel, kan du bruke unset funksjon, som vist i følgende utdrag.

Dermed kan du ikke lenger få tilgang til $ _SESSION [ 'logged_in_user_id'] variabel som den er slettet av unset funksjon. Så det er slik du kan endre sesjonsinformasjonen.

Hvordan å ødelegge en sesjon

I denne delen ser vi hvordan du kan ødelegge en økt. I den forrige delen diskuterte vi unset funksjon, som brukes hvis du vil slette bestemte øktvariabler. På den annen side, hvis du vil slette alle øktrelaterte data samtidig, kan du bruke session_destroy funksjon.

La oss prøve å forstå hvordan det fungerer ved hjelp av følgende eksempel.

De session_destroy funksjon sletter alt som er lagret i den nåværende økten. Dermed vil du se et tomt $ _SESSION variabel fra de påfølgende forespørsler ettersom øktdataene som ble lagret på disken, ble slettet av session_destroy funksjon.

Vanligvis vil du bruke session_destroy Fungerer når brukeren blir logget ut.

Konklusjon

I denne artikkelen har vi utforsket grunnleggende om økthåndtering i PHP. Det er et nøkkelbegrep som gir deg mulighet til å fortsette informasjon på tvers av nettsider.

I første halvdel av artikkelen diskuterte vi de grunnleggende konseptene for økter, og senere skapte vi noen få PHP-eksempler for å demonstrere hvordan du kan lage og ødelegge økter, samt manipulere øktvariabler.