[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, la Universitat de Harvard] [Aquest és CS50.] [CS50.TV] Sessions en PHP es poden utilitzar per implementar la funcionalitat, com els inicis de sessió dels usuaris, en la seva aplicació web. Sessions de PHP li permeten associar informació amb tota la sessió de navegació de l'usuari en lloc de limitar-se a una sola pàgina. Així que això significa que l'usuari visita diverses pàgines PHP que componen el seu lloc web, qualsevol informació a la sessió persistirà. Així que això significa que les dades emmagatzemades a la sessió per una pàgina més tard es pot accedir per una altra pàgina. L'emmagatzematge d'informació en una sessió és fàcil, i ho fem a través de la mostra de dòlar, subratllat, variable SESSION capital. Signe de dòlar, subratllen, SESSIÓ-igual que el signe de dòlar, el subratllat, GET i el signe de dòlar, subratllat, POST- és un array associatiu consistent en parells de valors clau. Així que podem usar el signe de dòlar-com sintaxi, subratllat, REUNIÓ, suport, cita, menjar, cita, suport, és igual, cita, bar, cita- per emmagatzemar el "bar" valor en la clau "foo". No obstant això, abans de poder escriure o llegir de la matriu de la sessió, haurem de cridar a una funció especial sessió, subratllen, iniciar, () - i això va a inicialitzar la sessió. Així que donem una ullada a un exemple. La nostra primera pàgina, hello.php, utilitza la sessió a la sortida d'algunes dades per a l'usuari. Recordeu, nosaltres haurem de fer servir session_start abans de poder accedir a les dades de la sessió. Ara estem utilitzant isset de PHP per determinar si hi ha una clau a la matriu associatiu $ _SESSION. Si existeix aquesta clau, això significa que l'usuari ha iniciat la sessió, així que anem a mostrar el nom de l'usuari. Si no s'estableix aquesta clau, això significa que l'usuari no ha iniciat sessió encara, així que mostrarem un enllaç a login.php. Així que donem una ullada a login.php. Aquí sota, tenim un únic formulari HTML amb una sola entrada. Atribut action del formulari és de $ _SERVER ['PHP_SELF'], i això simplement vol dir que volem que el formulari que es presentarà a la imatge actual, que, en aquest cas, és login.php. Així que anem a tornar a la part superior d'aquest arxiu. Si l'usuari envia el formulari, a continuació, $ _POST ['name'] s'ha d'establir. Per obtenir més informació sobre els formularis HTML i post, veure el vídeo de Desenvolupament Web PHP. En el cas que l'usuari fer enviar el formulari, ens agradaria escriure el valor que ells escriuen en en la sessió. Ara podem redirigir l'usuari a hello.php. Com que hem emmagatzemat l'entrada de l'usuari en la sessió, hello.php podran accedir al valor que es va establir a login.php. Així que anem a veure això en un navegador web. En primer lloc, anem a navegar a http://localhost/hola.php. Podem veure aquí que no hem registrat encara, així que anem a fer clic a l'enllaç d'inici de sessió, el que ens redirigirà a login.php. Està bé, t'escric en nom meu, que després s'emmagatzema en la sessió. Great! Ara podem veure la meva entrada de login.php en hello.php a través de la sessió. Així que, què passa amb el registre l'usuari sortir? Bé, amb la finalitat de registrar l'usuari que, simplement guardar un valor en nom de la sessió. Així que per registrar l'usuari fora, simplement hem de treure aquesta clau de nom de la matriu de la sessió. Així que donem una ullada a aquest últim arxiu, logout.php. Un cop més, haurem de trucar a session_start () abans de poder fer qualsevol cosa relacionada amb la sessió. Ara podem simplement cridar session_destroy (), que s'encarregarà de desfer-se de totes les dades de la sessió i després redireccionar al'usuari a hello.php. Així que si faig clic a l'enllaç de la sessió, podem veure que el servidor s'ha oblidat del que sóc, i ja no estic logged in Llavors, què està passant aquí sota de la caputxa? Per tal d'obtenir el comportament que acabem de veure, nostre servidor ha de fer 2 coses. En primer lloc, el servidor necessita per emmagatzemar d'alguna manera les dades de la sessió. Els diferents arxius PHP que componen una pàgina web s'executen com invocacions separades de l'intèrpret PHP variable, de manera local no es pot compartir entre ells. En el seu lloc, el servidor necessita per emmagatzemar les nostres dades de la sessió en algun lloc que múltiples. php poden accedir. En segon lloc, el servidor ha de associar les dades de la sessió només amb la meva sessió de navegació. Quan em connecto a Facebook, probablement hi ha milions d'altres persones també connectat a Facebook al mateix temps. No obstant això, el servidor necessita alguna manera d'associar les meves dades amb el meu actual període de sessions i les dades d'una altra persona amb una altra sessió. Per sort, els autors de PHP pensaven sobre tot això per a nosaltres, així que no hem de posar en pràctica tot això nosaltres mateixos. Però donem una ullada al que PHP fa per defecte. Quan visito una pàgina PHP que conté session_start per primera vegada, PHP generar un gran valor aleatori. Fins session_destroy es diu-o jo no visitar les pàgines PHP en aquest lloc per un temps- aquest valor aleatori i probablement únic s'associarà a mi. D'aquesta forma el servidor té alguna forma d'identificar la meva sessió de navegació en lloc d'una altra persona. Podem fer una ullada a la identificació de la sessió actual utilitzant la funció de PHP, SESSION_ID. Aquí estem simplement emetre el valor del nostre identificador de sessió. Així que si tornem a iniciar sessió en l'aplicació d'exemple web, i ara navegar fins sessid.php, anem a veure aquesta llarga cadena de caràcters, i aquest és l'identificador actual de la meva sessió, i així és com el servidor és fer el seguiment del que sóc. Està bé, però només hem solucionat la meitat del problema. És clar, el servidor ara té alguna forma d'identificar, però en la meva visita a una altra pàgina, el servidor ha de tornar a utilitzar el mateix identificador en lloc de generar una nova. Recordeu, si jo declaro una variable local a foo.php ia continuació, visiteu Bar.php, Bar.php no té manera de saber el que va passar a foo.php. De manera que l'aplicació de sessions php defecte requereix que el navegador recordi al servidor que l'ID de sessió per utilitzar. Això s'implementa en forma d'una galeta. Una galeta-a més de ser un deliciós berenar- és simplement un petit arxiu de text a l'ordinador que un servidor pot escriure a través del navegador web. Així que després de PHP genera meva única identificació de la sessió a través d'session_start, que va a dir-li al navegador web per emmagatzemar aquest identificador en un arxiu de text local, o una galeta. A continuació, el navegador web inclourà aquest identificador a cada petició que fa al servidor. Així que en realitat, el servidor web no és recordar qui sóc. En canvi, el navegador web és simplement recordant l'identificador únic que va ser generada per PHP i després recordant constantment el servidor el que és l'identificador. D'aquesta manera, la informació de la mateixa manera que el meu nom d'usuari s'emmagatzema al servidor, no el navegador web. El navegador simplement li diu al servidor on PHP emmagatzema aquesta informació pel que PHP pot recuperar-la. Així que planteja la pregunta, on és realment PHP emmagatzemant aquesta informació? Per defecte, PHP emmagatzemar les seves dades de sessió en un arxiu dins de / tmp, oa la carpeta "temp". El nom d'aquest arxiu s'inclourà la identificació de la sessió pel que PHP pot determinar un arxiu a llegir i escriure a través de només l'identificador de sessió. Està bé. Així que anem a obrir la fitxa Xarxa en el depurador de Chrome a través de la icona de clau anglesa a la part superior dreta. Ara anem al capdavant a hello.php nou. Farem clic sobre la sol · licitud HTTP per hello.php i després feu clic a capçaleres. Aquí podem veure que la capçalera de galeta conté una clau anomenada PHPSESSID, o sessió de PHP-ID amb un valor que és aquesta mateixa llarga cadena que vam veure quan visitem sessid.php. Així és exactament com el navegador està recordant al servidor què ID de sessió s'ha d'usar. Està inclosa en una capçalera HTTP. Està bé. Tornem a la terminal. Anem a navegar a / tmp, on PHP emmagatzema la informació de la sessió per defecte. Efectivament, a l'interior d'aquesta carpeta temporal, aquí hi ha un arxiu que conté exactament el mateix ID de sessió. Si obrim l'arxiu, podem veure com PHP està representant la meva sessió en el disc. Aquí la cadena "Tommy" s'està emmagatzemant per a la clau 'nom' que és exactament el que estàvem esperant. I això és una visió general de les sessions en PHP. El que acabem de veure va ser només la implementació per defecte de sessions. De fet, molts llocs web canvien aquest comportament predeterminat per emmagatzemar les sessions de PHP de manera més eficient en l'interès de millorar el rendiment. El meu nom és Tommy, i això és CS50. [CS50.TV]