[Powered by Google Translate] [PHP Sessies] [Tommy MacWilliam, Harvard University] [Dit is CS50.] [CS50.TV] Sessies in PHP kan worden gebruikt voor het implementeren functionaliteit, zoals logins, in uw web app. PHP sessies kunt u informatie associëren met hele sessie van de gebruiker in plaats van gewoon een enkele pagina. Dus dat betekent dat als de gebruiker verschillende PHP-pagina's van uw website bezoekt, alle informatie in de sessie zal blijven bestaan. Dat betekent dat gegevens die in de zitting door een pagina kan later worden geopend door een andere pagina. Het opslaan van informatie in een sessie is eenvoudig, en dat doen we via het dollarteken, onderstrepen, hoofdstad sessie variabele. Dollarteken, underscore, sessie-net als dollarteken, onderstrepen, GET en dollarteken, underscore, POST- is een associatieve array die bestaat uit de belangrijkste waarde paren. Dus we kunnen syntax-achtige dollarteken gebruiken, onderstrepen, sessie, bracket, citaat, foo, citaat, beugel, evenaart, citaat, bar, citaat- op de waarde "bar" op te slaan in de "foo". Echter, voordat we kunnen schrijven of lezen uit de sessie array, we moeten een speciale functie-bellen sessie, onderstrepen, start, () - en dit zal de sessie initialiseren. Dus laten we eens kijken naar een voorbeeld. Onze eerste bladzijde hello.php gebruikt de sessie output bepaalde gegevens aan de gebruiker. Vergeet niet, we moeten session_start gebruiken voordat we elke sessie toegang tot de gegevens. Nu zijn we met behulp van PHP's isset om te bepalen of een sleutel bestaat in de $ _SESSION associatieve array. Als die sleutel bestaat, dat betekent dat de gebruiker zich heeft aangemeld, dus we zullen de naam van de gebruiker weer te geven. Als die sleutel niet is ingesteld, dat betekent dat de gebruiker heeft nog niet ingelogd, dus we zullen een link naar login.php geven. Dus laten we eens een kijkje nemen op login.php. Hier beneden hebben we een HTML-formulier met een enkele input. Actie attribuut van het formulier is $ _SERVER ['PHP_SELF'], en dit betekent gewoon dat we willen dat de vorm aan het huidige bestand te worden ingediend, die in dit geval is login.php. Dus laten we terug naar de top van dit bestand gaan. Als de gebruiker het formulier ingediend, toen $ _POST ['naam'] moet worden ingesteld. Voor meer informatie over HTML-formulieren en post, kijk op de PHP Web Development video. In het geval dat de gebruiker wel te weten, willen we de waarde die ze getypt in in de sessie te schrijven. Nu kunnen we de gebruiker om hello.php omleiden. Omdat we invoer van de gebruiker opgeslagen in de sessie, hello.php staat zal zijn om toegang te krijgen tot de waarde die is ingesteld in login.php. Dus laten we dit zien in een webbrowser. Eerst zullen we navigeren naar http://localhost/hello.php. We kunnen hier zien dat we nog niet hebben aangemeld, dus laten we op de login-link, die ons zal leiden naar login.php. Oke, ik zal het type in mijn naam, die vervolgens zal worden opgeslagen in de sessie. Geweldig! Nu kunnen we mijn inbreng zien van login.php op hello.php via de sessie. Dus, hoe zit het met het loggen van de gebruiker uit? Nou, om de gebruiker te melden, we gewoon opgeslagen en een waarde in naam sessie. Dus om de gebruiker uit te loggen, we moeten gewoon die naam sleutel te verwijderen uit de sessie array. Dus laten we eens een kijkje nemen op deze laatste bestand, logout.php. Nogmaals, we moeten session_start bellen () voordat we iets sessie gerelateerd kunnen doen. Nu kunnen we gewoon session_destroy noemen (), die zorg zal dragen voor het wegwerken van alle gegevens in de sessie en leid de gebruiker terug naar hello.php. Dus als ik klik op de link Log Out, kunnen we zien dat de server is vergeten wie ik ben, en ik ben niet meer ingelogd Dus wat is hier aan de hand onder de motorkap? Om het gedrag dat we net zagen komen, onze server moet 2 dingen doen. Ten eerste moet de server of andere manier de gegevens in de sessie opgeslagen. De verschillende PHP-bestanden die een website bestaan worden uitgevoerd als afzonderlijke aanroepen van de PHP-interpreter zodat lokale variabele kan niet gedeeld worden tussen hen. In plaats daarvan moet de server onze sessie op te slaan in een plaats die meerdere. php-bestanden kunt openen. Ten tweede, de server nodig heeft om de sessie gegevens aan alleen mijn sessie. Als ik inlog op Facebook, er zijn waarschijnlijk miljoenen andere mensen ook aangemeld bij Facebook tegelijk. Maar de server heeft een manier nodig associëren mijn gegevens met mijn huidige sessie en de gegevens van iemand anders met een andere sessie. Gelukkig, de auteurs van PHP dacht over dit alles voor ons, dus we hebben geen behoefte aan een van deze zelf te implementeren. Maar laten we eens kijken naar wat PHP doet standaard. Als ik naar een PHP-pagina met session_start voor de eerste keer, PHP zal een grote willekeurige waarde te genereren. Tot session_destroy heet-of ik geen PHP pagina's op die site te bezoeken voor een tijdje- dat willekeurige en waarschijnlijk unieke waarde zal geassocieerd worden met mij. Op die manier de server heeft een aantal manier van identificeren mijn sessie in tegenstelling tot iemand anders. We kunnen een kijkje nemen op de huidige sessie ID te nemen met behulp van de PHP functie, session_id. Hier zijn we gewoon uitvoeren van de waarde van onze sessie-id. Dus als we opnieuw in te loggen om het voorbeeld web app, en nu navigeren naar sessid.php, zullen we deze lange reeks tekens te zien, en dat is de huidige identifier voor mijn sessie, en dat is hoe de server is het bijhouden van wie ik ben. Oke, maar we hebben alleen opgelost helft van het probleem. Tuurlijk, de server heeft nu een manier van identificeren mij, maar als ik naar een andere pagina, moet de server die dezelfde identificatie hergebruiken in plaats van het genereren van een nieuwe. Vergeet niet, als ik verklaar een lokale variabele in foo.php en ga daarna naar bar.php, bar.php heeft geen manier om te weten wat er is gebeurd in foo.php. Dus de sessie uitvoering standaard php vereist dat de browser herinneren de server welke sessie ID te gebruiken. Dit wordt geïmplementeerd in de vorm van een cookie. Een cookie-naast het feit dat een heerlijke snack- is gewoon een klein tekstbestand op uw computer dat een server kan schrijven om via de webbrowser. Dus na PHP genereert mijn unieke sessie-id via session_start, het gaat om de webbrowser te vertellen dat identifier op te slaan in een lokaal tekstbestand of een cookie. Dan zal de browser bevatten die identificatie in elk verzoek dat maakt het naar de server. Dus echt, de webserver niet herinneren wie ik ben. In plaats daarvan wordt de webbrowser gewoon onthouden van de unieke identificatie dat werd gegenereerd door PHP en vervolgens voortdurend herinneren de server wat dat identifier is. Op die manier informatie zoals mijn gebruikersnaam wordt opgeslagen op de server niet mijn web browser. De browser gewoon vertelt de server waar PHP opgeslagen die informatie dus PHP kan halen. Dus dat roept de vraag op, waar PHP is eigenlijk het opslaan van deze informatie? Door gebrek, zal PHP uw sessie gegevens op te slaan in een bestand binnen van / tmp, of de 'temp' map. De naam van dat bestand zal de sessie-ID, zodat PHP kan bepalen welk bestand lezen en schrijven van alleen via de sessie-ID. Oke. Dus laten we het openstellen van het tabblad Netwerk in Chrome debugger via de sleutel icoon rechtsboven. Nu op naar weer hello.php. Laten we op het HTTP-verzoek naar hello.php en klik vervolgens op Headers. Hier kunnen we zien dat het cookie header bevat een sleutel genaamd PHPSESSID, of PHP sessie-ID met een waarde die dezelfde lange reeks zagen toen wij er waren sessid.php. Dit is hoe de browser herinnert de server welke sessie ID te gebruiken. Het is het op te nemen in een HTTP-header. Oke. Laten we terug naar de terminal. Laten we navigeren naar / tmp, waar PHP de sessie-informatie opslaat standaard. En ja hoor, de binnenkant van deze tijdelijke map, hier is een bestand dat precies dezelfde sessie-ID bevat. Als we openen dit bestand, kunnen we zien hoe PHP vertegenwoordigt mijn sessie op de schijf. Hier de string "Tommy" wordt opgeslagen voor de sleutel 'naam' dat is precies wat we verwacht hadden. En dat is een overzicht van de sessies in PHP. Wat we net zagen was alleen de standaard uitvoering van de sessies. In feite zijn veel websites te veranderen dit standaard gedrag PHP sessies efficiënter opslaan in het belang van het verbeteren van de prestaties. Mijn naam is Tommy, en dit is CS50. [CS50.TV]