Meny
Är gratis
checka in
den huvudsakliga  /  Utbildning / Där PHP-sessionerna är lagrade. PHP-sessioner under skalpellen

Där PHP-sessionerna är lagrade. PHP-sessioner under skalpellen

På Internet hittar du tusentals handledning om vad sessioner är för vad de behöver och hur man arbetar med dem. Men tyvärr, efter att ha läst dem, kvarstår många frågor. Enligt min åsikt är det enklaste sättet att räkna ut det i allt för att se hur sessionerna arbetar från insidan. De där. Undersök webbläsare och webbserveringsloggar, liksom se vilka data som sparas på klientsidan och på serverns sida.

Därefter blir många ögonblick mycket tydligare, och själva mekanismen är mer transparent.

Sessionerna kommer att studeras vid följande standardskript:

Det fungerar som följer:

Block 1. Funktionen Session_Start () skapar en ny session eller laster den gamla, med hjälp av den unika PHSESSID-sessionsidentifieraren.

Block 2. Om du lyckades återställa sessionen ökar värdet på $ _session ["Visningar"] av en. Om inte, initialiseras av en.

I teorin, om Cook-support är aktiverat i webbläsaren måste mekanismen fungera och varje gång sidan uppdateras, ökar mätarens värde med en.

Första laddningsskriptet

Begär rubriker

Få / http / 1.1 värd: Firingrange.Lokal Användaragent: Mozilla / 5.0 (Windows NT 5.1; RV: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Acceptera: Text / HTML, Application / XHTML + XML, Application / XML; q \u003d 0,9, * / *; q \u003d 0,8 Acceptera språk: RU-EN, RU; q \u003d 0,8, EN-US; Q \u003d 0,5, EN; q \u003d 0,3 Acceptera kodning: GZIP, DEFLATE Acceptera-Charset : Windows-1251, UTF-8; q \u003d 0,7, *; q \u003d 0,7 Anslutning: Keep-Alive Cache-Control: Max-Ålder \u003d 0

Rubriks svar

Http / 1,1 200 ok Datum: Thu, 29 sep 2011 20:36:15 GMT Server: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 Set-cookie: PHPSESSID \u003d K33En6CCGCIA7125MITJ5TE4U6; väg \u003d / Förfaller: Thu, 19 nov 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, måste-revalidate, post-check \u003d 0, Pre-check \u003d 0 Pragma: No-cache-innehållslängd: 58 Keep-alive: timeout \u003d 5, max \u003d 100 Anslutning: Keep-alive Innehållstyp: Text / HTML

Kommentar

I den ursprungliga begäran har webbläsaren inte identifierat sig på något sätt, så mekanismen sessioner php. Genererade en ny unik sessionidentifierare och beordrade webbläsaren för att skapa en gäng där denna mycket identifierare kommer att lagras.

Sidoserver

Som ett resultat av skriptet på serverns sida skapas SESS_K33EN6CCGCIA7125MITJ5TE4U6 av följande innehåll:

Klientsidan

På klientsidan skapas Cook PHSESSID, där värdet på den unika identifieraren för sessionen är lagrad.

Notera. För pHP-inställningar Som standard är LifeTime of Cook PHPSESSID - tills webbläsaren är stängd. De där. Så snart webbläsaren är stängd, kommer Cook att raderas, och sessionen kommer att förloras i enlighet med detta. Livslängden för cookie PHPSESSID kan ändras genom att variera värdet av session.Cookie_lifetime.

Resultatet av skriptets arbete

Andra lastningsskriptet

Begär rubriker

Få / http / 1.1 värd: Firingrange.local Användaragent: Mozilla / 5.0 (Windows NT 5.1; RV: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Acceptera: Text / HTML, Applicering / XHTML + XML, Applicering / XML; Q \u003d 0,9, * / *; q \u003d 0,8 Acceptera språk: RU-EN, RU; Q \u003d 0,8, EN-US; Q \u003d 0,5, EN; Q \u003d 0,3 Acceptera kodning: gzip, deflate Acceptera-Charset: Windows-1251, UTF-8; Q \u003d 0,7, *; q \u003d 0,7 Anslutning: Keep-Alive Cookie: PHPSESSID \u003d K33En6CCGCIA7125MITJ5TE4U6 Cache-Control: MAX-AGE \u003d 0

Rubriks svar

Http / 1.1 200 OK Datum: Thu, 29 sep 2011 20:49:41 GMT Server: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Förfaller: Thu, 19 nov 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-revalidate, Post-check \u003d 0, Pre-Check \u003d 0 Pragma: No-Cache Innehållslängd: 58 Keep-Alive: Timeout \u003d 5, Max \u003d 100 Anslutning: Keep-alive Innehållstyp: Text / HTML

Kommentar

Webbläsaren skickar en PHPSESSID Cook-webbserver med PHP initierar $ _SESSION-array med värden från SESS_K33En6CCGCIA7125MITJ5TE4U6-filen. Följaktligen utgår i block 2 IF (raka) grenen.

Sidoserver

Som ett resultat av skriptoperationen ändras innehållet i SESS_K33EN6CCGCIA7125MITJ5TE4U6-filen:

Klientsidan

Klienten ändras inte på klienten.

Resultatet av skriptets arbete

Vad kommer härnäst?

Efterföljande nedladdningar på sidan innan du stänger webbläsaren kommer att fungera analogt med hur den andra laddningen av skriptet fungerade.

Därför att Cooks livstid var begränsad till den aktuella sessionen i webbläsaren, sedan efter dess stängning kommer den unika sessionsidentifieraren att gå vilse och vid omstart av processen kommer att gå på en ny.

Du kan dock återgå till den sparade sessionen, om du uttryckligen anger PHSESSID som skriptparametern:

Återgå till sessionen är ganska villkorad, för Som ett resultat av skriptoperationen i det här fallet skapas inte Cook. Serverresponshuvud:

Http / 1.1 200 OK Datum: Thu, 29 sep 2011 21:01:52 GMT Server: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Förfaller: Thu, 19 nov 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-revalidate, Post-check \u003d 0, Pre-Check \u003d 0 Pragma: No-Cache Innehållslängd: 58 Keep-Alive: Timeout \u003d 5, Max \u003d 100 Anslutning: Keep-alive Innehållstyp: Text / HTML

De där. För att upprätthålla arbetet är det från den här sessionen till alla länkar som ska hänföras till? PHPSESSID \u003d K33En6CCGCIA7125MITJ5TE4U6.

Notera. Du kan ange php så att den unika sessionsidentifieraren endast överförs via kocken. För att göra detta, installera session.use_only_cookies i värde 1. I det här fallet kommer tricket, som visat sig inte att passera.

Om cookies är inaktiverade i webbläsaren, kan du sända sessions-id via parametrarna, som vi gjorde ovan. Dessutom finns det en mekanism i PHP som kommer att lägga till den önskade parametern till länken och tillsätt dolda fält i formen. Principen om operation är exakt densamma som med cookies, så vi kommer inte att demontera detta fall separat.

Små frågeformulär (FAQ)

Var lagras sessionsdata fysiskt?

Sessiondata lagras på servern. Som standard registreras de i filer, men du kan ange din egen session datalagringsmekanism (till exempel med hjälp av en databas). Om du vill ha detaljer, se session_set_save_handler-funktionen.

Vem genererar en unik sessionidentifierare?

En unik sessionidentifierare (PHPSESSID) genererar en server.

Är det möjligt att skriva din egen mekanism för sessioner?

Ja, det är ganska möjligt. Som du kan se, använder PHP inte något övernaturligt - Identifieraren sparas mellan förfrågningar med Cook, sessionsdata lagras i filerna på servern.

Till exempel är den egna mekanismen för att arbeta med sessioner i den populära ramkodignitern.

Hur säker är sessionsmekanismen?

Sessionen identifieras endast med hjälp av en unik sessionidentifierare, så i det allmänna fallet är angriparen tillräckligt för att stjäla den för att förvirra servern. Ta testskriptet som vi använde ovan. Om överklagandet till det är från en annan IP (med avseende på den session du skapade), men PHSESSID kommer att överföras densamma, kommer sessionen att återställas och räknaren ökar från det tidigare sparade värdet.

Ge ytterligare skydd kommer att ha dig själv. Till exempel:

  • Du kan spara i data från IP-sessionen och användaragenten klienten (kommer att lagras på serverns sida), och sedan vid varje handtag är det nödvändigt att verifiera att de nuvarande värdena sammanföll med de sparade. I det här fallet måste du leta efter en kompromiss mellan användarens säkerhet och bekvämlighet.

    Till exempel, om användaren har en dynamisk IP och du använder sessionen för att behålla behörighet, men samtidigt kontrollera navigeringen av den IP, måste användaren komma in i användarnamnet och lösenordet igen.

    På samma sätt kan användaragentsträngen variera när du uppdaterar webbläsarens version eller när du installerar några plugins.

  • En av de rekommenderade sessionsskyddsmekanismerna är att re-generera en identifierare varje gång skriptet tilltalar (se session_regenerate_id-funktionen). Visa skriptet och arbetsalgoritmen i avsnittet kan vara nedan.

    Notera.Om du tror att diskussionen på den officiella hemsidan, då när det ska generera en identifierare, kan problem uppstå med parallell tillgång till data.

Arbetssessioner med återgivande identifierare i sammanhanget

Manus


// block 1.
session_start ();
om(isset.($ _Session ["initierad"]))
session_regenerate_id ();
aNNAN.
$ _Session ["initierad"] \u003d sann.;

// block 2.
om(isset.($ _Session ["Visningar"]))
$ _Session ["Visningar"] ++;
aNNAN.
$ _Session ["Visningar"] \u003d 1;

// block 3.
eko."
< body>
Antal visningar: ". $ _Session [" Visningar "]."

" ;

?>

Som redan känt tillåter HTTP-protokollet webbapplikationerna att installera "sessioner" - en dialog mellan klienten och servern, och statusen för den här dialogen sparas från begäran till begäran.

PHP-språk, som är på huvudspråket för webbprogrammering, ger möjlighet att använda HTTP-sessionsmekanismen, ta de flesta bekymmer när de organiserar och lagrar dessa sessioner. Låt mig påminna dig om att det är nödvändigt att arbeta för mekanismen för http-sessioner:

  • Servern måste generera ett unikt sessionsnummer.
  • Sessionsnumret måste överföras till klienten (vanligtvis genom cookies).
  • Servern ska kunna spara sessionsdata i filer eller i databasen, så att de kan återställas och känna till sessionsnumret som klienten skickar servern under efterföljande förfrågningar (även av cookies).

Egentligen är den enda åtgärd som måste tas i PHP-programmet så att växlarna i sessionsmekanismen vrids är att ringa en enda funktion: session_start (). Denna funktion gör alla nödvändiga åtgärder:

  • Kontrollerar om klienten inte har skickat numret på den redan befintliga sessionen i cookien eller i förfrågningsparametrarna. Om klienten skickade sessionsnumret, laddas data för den här sessionen från platsen för den konstanta lagringen (till exempel filen) till minnet, och programmet blir tillgängligt via en rad $ _session. Om klienten inte har skickat sessionsnumret eller en sådan session finns det inte på servern - en ny session skapas med ett nytt nummer, och dess data är också tillgängliga via en $ _SESSION-array, som i fallet med en ny session kommer att vara tomt. Antalet nyskapade sessionen är placerad i set-cookie-serverns svarhuvud.
  • Ger sparande sessionsdata. Efter att PHP-programmet har behandlat begäran, nuvarande tillstånd Den $ _SESSION-arrayen är lagrad på platsen för ständig lagring för att återigen vara tillgänglig vid nästa kundförfrågan.

Nu, vet vi de detaljer som är dolda för session_start (), kan vi leka med den här mekanismen. Exemplet nedan lagrar ett nummer i sessionen, vilket ökar med en med varje kundförfrågan:

När du först anger den här sidan skickar servern en BUNCH-webbläsare med sessionsnumret:

Set-cookie.: Psyssid \u003d 4FTVCA7JMMNM04Q95R3SDSK6R6; väg \u003d /

Och samma sessionsnummer Browser skickas tillbaka till servern med varje efterföljande förfrågan. Nu, om du rengör cookies i webbläsaren, skapas en ny session på servern, och kontot i vårt testskript kommer att börja igen.

Ett mer äkta exempel: Användarinloggning

Oftast används sessionerna när användarinloggningen används. När du anger webbplatsen kommer användaren in i inloggningen och lösenordet som kontrollerar servern. Om inloggningen är korrekt måste servern komma ihåg användardata i sessionen, så att du inte frågar mer inloggning med lösenordet. I det enklaste fallet kommer detta exempel att vara:

Array ("Lösenord" \u003d\u003e "123", "Titel" \u003d\u003e "Admin",), "User" \u003d\u003e Array ("Lösenord" \u003d\u003e "QWE", "Titel" \u003d\u003e "Användare",),) ; Returnera Isset ($ användare [$ Logga in])? $ Användare [$ Logga in]: null; ) Funktion GetCurrentuser () ($ user \u003d ISSET ($ _ session ["user"])? $ _Session ["user"]: null; returnera $ user;) funktionssetcurrentuser ($ användare) ($ _session ["User"] \u003d $ användare;)?\u003e

Hej,!
LINK1 REFERENY2.

Gå ut Du har inte besökt webbplatsen. Ange inloggning och lösenord:
Logga in: Lösenord:

Detta program begär en inloggning och lösenord, och du kan logga in med inloggning användare., qwe. eller administration., 123 . Den samarbetade användaren visar en hälsning. Meddelandet visar meddelandet om användarnamnet eller lösenordet är felaktigt.

Så snart det var möjligt att gå till den här "webbplatsen", kan du anka via länkarna (länk1, referens2), medan den återstår en loggad användare.

Vilka data kan lagras i sessioner?

Förbi standard PHP. Butiker sessionsdata i en tillfällig fil som text. I det här kan du se till att titta på katalogen med tillfällig pHP-filer. Den här katalogen anges i phpInfo () i miljön, temp. I den här katalogen hittar du filerna i spec_ 4FTVCA7JMMNM04Q95R3SDSK6R6Där 4FTVCA7JMMNM04Q95R3SDSK6R6 är ett sessionsnummer som skickas till kakan. Ta en titt på den här filen: Om du startade det allra första exemplet ovan kommer filen att detekteras av ungefär innehållet: "Värde | I: 2;". Denna text är en serialiserad presentation av innehållet i sessionen, där endast en variabel lagras med numret.

Alla värden som PHP-programmet placerar i en session genom en $ _SESSION-array, när du sparar sessionen, blir en textart och spelas in i filen. Processen att omvandla variabler i texten kallas "serialisering". Således kan i sessionen eventuella data som PHP kan sesialisera.

Lyckligtvis, i php serialize inte bara enkla värden Det verkar som siffror och linjer, men även komplexa strukturer som arrays och objekt:

"; Print_r ($ _ session); echo""$ _Session [" testarray "] \u003d array (1, 2, 3," en "," två "," tre "," barn "\u003d\u003e array (5, 6, 7),); $ obj \u003d ny stdclass (); $ Obj-\u003e x \u003d 1234; $ obj-\u003e y \u003d 4567; $ _session ["testobject"] \u003d $ obj;

Detta exempel kommer att spela in sådana data till sessionfilen:

Testarray | A: 7: (I: 0; I: 1; I: 1; I: 2; I: 2; I: 3; I: 3; S: 3: "En"; I: 4; s: 3 : "Två"; I: 5; s: 5: "Tre"; s: 5: "Barn"; A: 3: (I: 0; I: 5; I: 1; I: 6; I: 2; I: 7;)) TESTOBJECT | O: 8: "STDClass": 2: (S: 1: "X"; I: 1234; S: 1: "Y"; I: 4567;)

Förvaring av objekt i sessionen

I sessionen, som du kan se kan du lagra objekt. Men samtidigt bör man komma ihåg att det är nödvändigt att hålla sig i sessionsobjekten, eller förekomma föremål för dina klasser, det är nödvändigt att annonserna för dessa klasser görs förrän session_start ( ) ring upp. Det vill säga att PHP ska känna till klassen innan det kommer att nämna det när de deserialiserar sessionsdata.

När objekten sparas finns det situationer där den vanliga serialiseringen av objektet av någon anledning är oacceptabel eller inte möjlig. I sådana fall är det möjligt att genomföra serialisering genom manuellt genom att deklarera "magiska" metoderna __sleep () och __wakeup () i klassen.

Förresten, Serialisering är möjlig att implementera och "manuellt", och det är inte nödvändigt att spara / ladda ner sessionsdata. Det kan behövas när vissa data i applikationen måste sparas för användning senare eller överföra över nätverket. Funktioner som kan vara användbara när Serialize / Deserialization - Serialize (), Oservialisera (), Jon_Encode (), JSON_DECODE ().

Vad kan inte lagras i sessionen?

I sessionen är det omöjligt att lagra vad det är omöjligt att serialisera. Ett exempel på en sådan enhet kan tjäna någon PHP-resurs. Resurser är nätverksanslutningar, öppna filbeskrivningar, databasanslutningar och några andra föremål. PHP-resursen är en referens till det interna objektet i djupet av PHP, som inte är tillgängligt direkt från programmet, men med vilket du kan arbeta, orsakar olika PHP-funktioner. En slags "svart låda", vars innehåll inte kan och bör inte serialisera.

Ytterligare egenskaper

PHP ger en utvecklare möjlighet att genomföra din egen session datalagringsmetod, till exempel i databasen. För att göra detta måste du implementera de funktioner som sparar och ladda ner sessionsdata från den ständiga lagringsplatsen. Därefter måste dessa funktioner vara engagerade i PHP genom att ringa funktionen session_set_save_handler.

För att påskynda processen att spara och ladda ner sessionsdata på högbelastade webbplatser kan den memcacached-servern användas, vilket lagrar data i minnet. Stöd för denna sessionslagring är inbyggd i PHP och konfigureras via php.ini-konfigurationsfilen.

Du kan ställa in namnet på den cookie-parametrar genom vilken sessionsnumret passeras, vilket indikerar namn, livstid, domän och andra parametrar.

Dessa och många andra alternativ för att konfigurera HTTP-sessioner i PHP är tillgängliga via session_ * -funktionerna.

Sessioner i PHP eller som data om användaren som kom till webbplatsen eller köparen sparas när du flyttar mellan sidorna utan mycket svårigheter. Lektionen är mycket viktigt. Relevant för att skapa 95% av platserna.

Vad är en session i php

Sessionerna används för att lagra tillfällig datainformation (till exempel att användaren har kommit in på webbplatsen) när du flyttar mellan sidorna på en webbplats. Vid användning av sessioner lagras data i temporära filer på servern.
Oftast används sessioner (och cookies också) när du skapar nätbutiker, forum, anslagstavlor, sociala nätverk, bloggar och andra resurser. Sessionssystemets bekvämlighet är att hålla den tillfälliga informationen för den slutna användaren / köparen, de data som är i den snabba åtkomsten av en viss tid. Sessionen har en naturlig hållbarhet - tills webbläsaren är stängd. Om du stänger endast sidan, då när du öppnar webbplatsen, kommer användaren / kunddata fortfarande att vara tillgängliga.

Logik av sessionen

Session (eller session) är ett slags tillfällig datalagring. Omedelbart varna dig, det är värt en liten mängd data. Till exempel, inloggning och lösenord för inställningsanvändaren eller dess serienummer i databasen.

Exempel på arbete
1. Användaren går in i inloggningen och lösenordet och kommer till webbplatsen
2. Data med inloggning och lösenord sparas i sessionen av en av sidorna på webbplatsen:

Fil index.php.

Session_start (); // Varje fil där du vill använda dessa sessioner ska i början av koden innehåller kommandot "Start-session"

$ LOGIN \u003d "admin";
$ lösenord \u003d "pass";
$ _Session ["Logga in"] \u003d $ Logga in; // spara den variabla innehållande inloggningen
$ _Session ["Lösenord"] \u003d $ lösenord; // spara variabeln innehållande lösenord

3. När du går till en annan sida på webbplatsen kommer dessa data också att vara tillgängliga:

Fil example.php. (eller någon annan sida)

Echo "Din inloggning". $ _ Session ["Logga in"]; // kommer ut "din inloggad administratör", även om vi på den här sidan inte skrev data!
Se, allt är enkelt!

4. Om du vill rensa sessionsdata, så nog:

Fil example.php.

Session_start (); // Kör sessionen igen igen

Unset ($ _ session ["Logga in"]); // så oregistrerade variabeln eller "förstört"
Echo "Din inloggning". $ _ Session ["Logga in"]; // kommer ut "din inloggning". Eftersom vi förstörde det i den sista raden, så finns det inga data

Session_destroy (); // Förstör sessionen. Alla data, inklusive $ _session ["lösenord"] inte längre. När de är querying visar ett fel
I allmänhet är denna överföring lik den efterföljande metoden, men du bör inte längre skriva mycket överskottskod, men alla data som sänds från sidan till sidan lagras i temporära filer på servern. Jag upprepar sessionerna måste innehålla små mängder data, så de är lämpliga för lagring av inloggningen / lösenordet, köparen och andra små volymer.

Överför värden eller array med PHP-session

I sessionen kan du spela in inte bara strängen utan också en rad data. Bara överdriv det inte med volymen av matrisen, eftersom allt detta kommer att påverka det fasta och ockuperade utrymmet på servern.

Vi använder igen någon startsida index.php.

Session_start ();

$ r \u003d array ("en", "två", "tre");

$ _Session ["ar"] \u003d $ r;

På sidan där allt kommer att visas
Spara data i sessioner och gå igenom länken till en annan sida, där alla data kommer att matas ut.

Filmottagare, sida test.php. Där vi öppnar en array

Session_start ();
Print_r ($ _ session ["ar"]);
// Avlägsna
/*
Array.
\u003d\u003e En.
\u003d\u003e Två.
\u003d\u003e Tre.
*/
?>
Du kanske vill uppdatera lektionen i minnet. I allmänhet bör allt vara klart.

Andra funktioner för att arbeta med sessioner

session_unregister (sträng) - Session glömmer värdet av en given global variabel;
session_destroy () - Sessionen förstörs (till exempel om användaren lämnade systemet genom att trycka på utmatningsknappen);
session_set_cookie_params (int lifetime [, strängväg [, strängdomän]]) - Med den här funktionen kan du installera hur länge sessionen kommer att leva, ställa in Unix_Timestamp som bestämmer sessionens dödstid.

Lista över funktioner för att arbeta med sessioner (session) i php
session_cache_expire - returnerar slutet på den aktuella cache-åtgärden
Session_cache_limiter - Gets och / eller sätter Cashel Cashet Limiter
Session_commit - alias session_write_close ()
Session_decode - avkodar sessionsdata från rad
session_destroy - förstör alla data registrerade för sessionen
session_encode - krypterar data för den aktuella sessionen som en sträng
session_get_cookie_params - Gets Cook Settings session
session_id - Gets och / eller sätter nuvarande session ID
session_is_registered - Bestämmer om variabeln är registrerad i sessionen
session_module_name - Gets och / eller sätter den aktuella sessionsmodulen
session_name - Gets och / eller ställer in namnet på den aktuella sessionen
session_regenerate_id - Ändrar den nuvarande sessionsidentifieraren som nyligen genererats
Session_register - Registrerar en eller flera variabler för den aktuella sessionen.
session_save_path - Gets och / eller ställer in vägen för att spara den aktuella sessionen
session_set_cookie_params - Ställer in parametrarna för kocksessionen
Session_set_save_handler - Ställer in lagringsfunktionerna på användarnivåsessionen
Session_Start - Initialiserar sessionsdata
Session_unregister - Relister en variabel från den aktuella sessionen
Session_unset - frigör alla variabler sessionen
Session_write_close - skriver sessionsdata och slut session

Exempel på sessioner

Sidvisningsräknare under sessionen. Vite exempel. Men efter att ha stängt webbläsaren börjar nedräkningen igen.

Några sidbesöksmätare som en del av en session

// ett enkelt exempel på att använda sessioner utan cookies.
session_name ("test");
session_start ();
$ _Session ["count"] \u003d @ $ _ session ["count"] + 1;
?>

Disken


I den aktuella arbetssessionen med webbläsaren öppnade du den här sidan.
En gång).
Stäng webbläsaren för att återställa den här mätaren.
Klicka här för att uppdatera sidan!
Vid varje övergång kommer räknaren att öka med 1)

Tack för uppmärksamheten! Lycka till i Endeavors!

Sessioner i PHP är en mekanism för att spara på kundens datorinformationsserversida. Faktum är att sessionen i PHP inte är så svårt ämne, men för hennes förståelse måste du veta principen om att arbeta cookies i PHP. Så, om du inte vet hur cookie arbetar i PHP, läser du först den lämpliga artikeln och återvänder sedan här.

Ordet session från engelska är översatt som en session, så känslan av sessioner i PHP blir mer förståelig, men termen "session", och vi kommer att använda den i den här artikeln.

Sessionerna i PHP är mycket lik kakan, samma par är nyckeln \u003d\u003e värde, bara de lagras på serverns sida.

Session_start ()

Session Vi måste börja, för detta finns en session_start () funktion. Den här funktionen startar en session eller en session som du kan kalla den.

Funktionen session_start () är önskvärt att ringa i början av sidan, men i mina exempel gör jag inte det här.

Array $ _session.

Sessioner är grupper av variabler som lagras på servern, men tillhör en unik besökare. Jag upprepar, det här är nyckelpunkten: sessioner lagras på servern.

För att säkerställa interaktionen hos varje besökare med dess data från sin session används cookie-fil., vars skapelse, som PHP ger sig, behöver du inte vara orolig för det. Denna cookie betyder bara för servern och kan inte användas för att få användardata.

På servern lagras sessionsdata i textfil. Och de är tillgängliga i PHP-programmet i $ _SESSION-arrayen. För att bevara variabeln i sessionen måste du tilldela ett värde i den här arrayen.

Låt oss äntligen börja använda exempel. Allt är väldigt enkelt.

Sessioner i php. värde. ";?\u003e

Låt oss nu försöka få ett värde från en array $ _session i ett annat exempel.

Sessioner i php.

Obs! Om det i det andra exemplet tar bort funktionen Session_Start (), så kommer vi inte att få tillgång till data med $ _SESSION-array.

Session_id ()

Efter att sessionen skapats, öppnar du automatiskt den unika sessionsidentifieraren med funktionen Session_ID (). Med den här funktionen kan du ange och ta emot värdet på sessionsidentifieraren.

Sessioner i php.

Du kan titta på verktygsfältet för dina webbläsareutvecklare (i Chrome för att göra det, tryck på CTRL + Shift + I, sedan Resources, och hittar en cookie), den här domänen sätter din cookie-webbläsare med namnet PhsSsID och ungefär ett sådant värde: "7G5DF9RKD1HHVR33LQ1K6C72P7".

Det är enligt PHPSESSID-värdet som kommer att definiera din webbläsare och arbeta med motsvarande uppsättning variabler som kommer att vara tillgängliga för skriptet genom $ _SESSION-arrayen, som redan skrivits tidigare.

Session_name () funktion

Om funktionen session_id () låter dig få sessionsidentifiervärdet, kan funktionen session_name () kan du ta reda på sessionsnamnet.

Sessioner i php.

Återigen om funktionen session_start ()

Nu vet vi mer om prozhanismen i sessionerna i PHP och du måste återvända till session_start () -funktionen igen. Den här funktionen initierar sessionsmekanismen för den aktuella användaren. Hur exakt det händer:

  • Om användaren lanserade webbplatsen för första gången, sätter session_start () cookien från klienten och skapar en tillfällig lagring på servern som är associerad med användar-ID.
  • Anger det förråd som är associerat med den överförda nuvarande identifieraren.
  • Om det finns data i förvaret på servern placeras de i en $ _SESSION-array.
  • Om register_globals från php.ini-filen är på, omvandlas alla element i $ _session-arrayen till globala variabler.

Ett exempel på att använda sessionen

Nu ska vi titta på ett exempel som tillåter mindre experiment med sessioner.

Sessioner i php.

Disken

I den aktuella sessionen öppnade du sidan tid.

Öppna ett exempel i "\u003e Den här fliken.

Allt sessionernas arbete är baserat på en array $ _session, det ses tydligt i det här exemplet.

Om du stänger webbläsarfönstret stoppas sessionen, vår mätare återställs. Detta beteende av sessioner i PHP kan ändras, vi kommer tillbaka till den här frågan lite längre i artikeln.

Slutförande av sessionen

För att slutföra sessionen behöver vi:

  1. Rensa $ _SESSION-array.
  2. Ta bort tillfälligt lagring på servern.
  3. Radera session cookie.

Tydlig massiv $ _session kan använda funktionen session_unset ().

Funktionen Session_Destroy () raderar det tillfälliga lagringen på servern. Förresten gör hon inget mer.

Du måste ta bort en sessionskaka med funktionen SetCookie (), som vi studerade i en studio med cookie i PHP.

Exempel på slutförandet av sessionen:

Slutförande av sessionen

Sessionen är klar.

Nu kan du utföra ett experiment: Kör ett exempel med en mätare i ett fönster, vrid räknaren och kör sedan ett exempel med raderingen av sessionen och förnya sidan med mätaren.

Ta bort kakefilen kan göras så här:

setCookie (session_name (), "", tid () - 60 * 60 * 24 * 32, "/")

Återigen om session_name () och session_id () funktioner

Funktionerna session_name () och session_id () är sällsynta i praktiken, men jag skriver om dem, eftersom artikeln måste avslöjas av mekanismen för drift av sessioner i PHP.

Med hjälp av dessa funktioner kan du ange egna namn och identifierare av sessioner, men det rekommenderas inte att göra det här. Om du ville ställa in dem, skriv sedan dessa funktioner med argument före session_start () -funktionen, som i exemplet nedan:

Sessioner i php.

När du använder det här exemplet kommer alla användare att tilldelas samma sessionsidentifierare.

Vi kommer att sluta mer detaljera om du börjar ett exempel från avsnittet om funktionen Session_Name () (här är länken) i olika webbläsare (till exempel i Chrome och Internet Explorer), kommer i varje webbläsare att ha sin egen unika session identifierare. Browsers lagrar cookies vardera i sin mapp, så funktionen session_start () kommer att ge varje webbläsare att skapa din egen, unik identifierare och, följaktligen, för varje webbläsare kommer att skapas ett unikt lagring på servern. Därför kommer ett exempel med en mätare (detta) i varje webbläsare att fungera oberoende av varandra.

Om du anger samma sessionidentifierare för alla användare, kommer de att arbeta med ett förråd på servern. Här är ett exempel på en räknare som kommer att överväga besök från olika webbläsare:

100) (session_unset (); session_destroy ();)?\u003e Sessioner i php.

Räknare nummer 2.

Öppnade sidan i olika webbläsare tid.

Öppna ett exempel i "\u003e Den här fliken.

Om du kör det här exemplet är det inte ett faktum att du kommer att se en enhet där. Andra besökare kan redan ändra värdena i sessionen lagring på servern. När i det här fallet raderar servern för arkivet - jag vet inte, så när mätaren överskrids, kommer värdet 100 att slutföra sessionen.

Ställa in väntetiden

Som standard lämnar sessionen "tills besökaren stänger webbläsarfönstret. Detta beror på det faktum att funktionen session_start () ligger hos klienten en sådan cookie.

Sessionens livslängd kan ändras med funktionen Session_Set_Cookie_Params (), här är dess syntax.

session_set_cookie_params (int lifetime [, strängväg [, strängdomän [, bool säkra]]]))

I praktiken är det tillräckligt att använda endast den första parametern (livstid), skriv ner tiden i sekunder, vilket bestämmer hur många servern måste komma ihåg sessionens status efter att webbläsaren är stängd.

Funktionen session_set_cookie_params () tillämpas endast för skriptperioden.

Här är ett exempel på att använda den här funktionen:

Sessioner i php.

Räknaren nummer 3.

Motvärde:.

Öppna mätaren i "\u003e den här fliken.

Skruva fast disken och stäng webbläsaren, efter 30 Sukund igen, öppna det här exemplet. Din session fortsätter.