[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Harvard University] [Det här är CS50.] [CS50.TV] Sessions i PHP kan användas för att implementera funktionaliteten, som inloggningar, i din webbprogram. PHP sessioner tillåter dig att associera informationen med användarens hela du surfar snarare än bara en enda sida. Så det betyder att när användaren besöker olika PHP-sidor som utgör din webbplats, alla uppgifter i sessionen kommer att bestå. Så det betyder att data som lagras i sessionen med en sida Senare kan nås av en annan sida. Lagra information i en session är lätt, och vi gör det via dollartecken, understreck, huvudstad SESSION variabel. Dollartecken, understreck, SESSION-precis som dollartecken, understreck, GET och dollartecken, understreck, POST- är en associativ array bestående av nyckelpar värde. Så vi kan använda syntax liknande dollartecken, understreck, SESSION, fäste, citat, foo, citat, fäste, lika, citationstecken, bar, quote- att lagra värdet "bar" i nyckeln "foo". Men innan vi kan skriva eller läsa från session array, vi behöver ringa en speciell funktion- session, understreck, start, () - och detta kommer att initiera sessionen. Så låt oss ta en titt på ett exempel. Vår första sida, hello.php använder sessionen att utmata en del data till användaren. Kom ihåg att vi måste använda session_start innan vi kan komma åt sessionsdata. Nu vi använder PHP: s isset för att avgöra om en nyckel finns i $ _SESSION associativ array. Om denna nyckel finns, innebär att användaren har loggat in, så vi får visa användarens namn. Om nyckeln inte är inställd, innebär att användaren har inte inloggad ännu, så vi kommer att visa en länk till login.php. Så låt oss ta en titt på login.php. Här nere har vi en enda HTML-formulär med en enda ingång. Formuläret agerande attribut är $ _SERVER ['PHP_SELF'], och det betyder helt enkelt att vi vill att formuläret ska lämnas in till den aktuella filen, som i detta fall, är login.php. Så låt oss gå tillbaka till toppen av denna fil. Om användaren skickat in formuläret, sedan $ _POST ['name'] måste ställas in. För mer information om HTML-formulär och post, kolla PHP Webbutveckling video. I det fall att användaren gjorde skicka formuläret, Vi skulle vilja skriva det värde som de skrivit in i sessionen. Nu kan vi omdirigera användaren till hello.php. Eftersom vi har lagrat användarens input i sessionen, hello.php kommer att kunna komma åt det värde som ställdes in i login.php. Så låt oss kolla in detta i en webbläsare. Först ska vi gå till http://localhost/hello.php. Vi kan se här att vi inte har loggat in ännu, så låt oss klicka på inloggningslänken, som kommer att omdirigera oss till login.php. Okej, jag skriver i mitt namn, som sedan kommer att lagras i sessionen. Bra! Nu kan vi se min input från login.php på hello.php via sessionen. Så, hur loggar användaren ut? Jo, för att logga in användaren i, vi helt enkelt lagrat ett värde i sessionsnamn. Så loggar användaren ut, måste vi helt enkelt ta bort det namnet nyckel från sessionen array. Så låt oss ta en titt på denna sista filen, logout.php. Än en gång, vi behöver ringa session_start () innan vi kan göra något session relaterade. Nu kan vi helt enkelt kalla session_destroy (), som tar hand om att bli av med alla data i sessionen och sedan omdirigera användaren tillbaka till hello.php. Så om jag klickar på Logga ut länken, Vi kan se att servern har glömt vem jag är, och jag är inte längre inloggad Så vad händer här under huven? För att få det beteende som vi såg bara, vår server behöver göra två saker. Först måste servern på något sätt lagra data i sessionen. De olika PHP-filer som utgör en webbplats utförs som separata anrop av PHP-tolken så lokal variabel kan inte delas mellan dem. Istället måste servern för att lagra våra sessionsdata på något ställe som flera. php-filer kan komma åt. För det andra måste servern att associera sessionsdata med bara min sessionen. När jag loggar in på Facebook, det finns förmodligen miljontals andra människor också inloggad på Facebook samtidigt. Men servern behöver något sätt att associera min data med min nuvarande session och någon annans data med en annan session. Lyckligtvis, författarna till PHP tänkt på allt detta för oss, så vi behöver inte genomföra något av det här själva. Men låt oss ta en titt på vad PHP gör som standard. När jag besöker en PHP-sida som innehåller session_start för första gången, PHP kommer att generera ett stort slumpmässigt värde. Tills session_destroy heter-eller jag inte besöka någon PHP-sidor på webbplatsen för en stund- som slumpmässigt och förmodligen unikt värde kommer att förknippas med mig. På så sätt servern har något sätt att identifiera min du surfar i motsats till någon annans. Vi kan ta en titt på den aktuella sessionen ID med hjälp av PHP-funktionen, session_id. Här är vi helt enkelt mata ut värdet av vår session identifierare. Så om vi återigen in till exempel web app, och nu navigera till sessid.php, vi får se denna långa teckensträng, och det är den nuvarande identifierare för min session, och det är hur servern är att hålla reda på vem jag är. Okej, men vi har bara löst halva problemet. Visst, har servern nu något sätt att identifiera mig, men när jag besöker en annan sida, måste servern att återanvända samma identifierare snarare än att generera ett nytt. Tänk, om jag deklarerar en lokal variabel i foo.php och sedan besöka bar.php, bar.php har ingen möjlighet att veta vad som hände i foo.php. Så genomförande standard php session kräver att webbläsaren påminna servern vilket sessions-ID som ska användas. Detta genomförs i form av en cookie. En cookie-förutom att vara ett läckert mellanmål- är helt enkelt en liten textfil på din dator att en server kan skriva till via webbläsaren. Så efter PHP genererar min unika sessions-ID via session_start, det kommer att tala om för webbläsaren att lagra denna identifierare i en lokal textfil, eller en kaka. Då webbläsaren kommer att inkludera att identifierare i varje begäran att den gör till servern. Så egentligen, är webbservern inte komma ihåg vem jag är. Istället är det webbläsaren helt enkelt komma ihåg den unika identifierare som genereras av PHP och sedan ständigt påminna servern vad som identifierare är. På så sätt, uppgifter som mitt användarnamn lagras på servern inte min webbläsare. Webbläsaren berättar helt enkelt den server där PHP lagrade informationen så PHP kan hämta det. Så det väcker frågan, var är PHP faktiskt lagrar den här informationen? Som standard kommer PHP spara din session uppgifter i en fil inne i / tmp, eller den "temp"-mappen. Namnet på den filen kommer att innehålla sessions-ID så PHP kan avgöra vilken fil för att läsa och skriva från via endast sessions-ID. Okej. Så låt oss öppna fliken Nätverk i Chromes debugger via skiftnyckeln uppe till höger. Låt oss nu gå till hello.php igen. Låt oss klicka på HTTP-begäran att hello.php och sedan klicka på rubriker. Här kan vi se att cookien huvudet innehåller en nyckel som heter PHPSESSID, eller PHP sessions-ID-med ett värde som är samma lång sträng som vi såg när vi besökte sessid.php. Det är precis hur webbläsaren påminner servern vilken sessions-ID ska användas. Det är bland annat den i ett HTTP-huvud. Okej. Låt oss gå tillbaka till terminalen. Låt oss gå till / tmp, där PHP lagrar sessionsinformationen som standard. Visst nog, insidan av denna temporära mappen, Här är en fil som innehåller exakt samma sessions-ID. Om vi ​​öppnar den här filen, kan vi se hur PHP representerar min session på disken. Här strängen "Tommy" lagras för nyckeln "namn," vilket är precis vad vi väntade. Och det är en översikt av sessioner i PHP. Vad vi såg bara var bara standard genomföra sessioner. Faktum är att många webbplatser ändra detta standardbeteende att lagra PHP sessioner mer effektivt i syfte att förbättra prestandan. Mitt namn är Tommy, och detta är CS50. [CS50.TV]