[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Harvard University] [Questo è CS50.] [CS50.TV] Le sessioni in PHP possono essere utilizzati per implementare la funzionalità, come login utente, nel tuo web app. Sessioni PHP permettono di associare informazioni con tutta la sessione di navigazione dell'utente piuttosto che semplicemente una singola pagina. Quindi significa che l'utente visita diverse pagine PHP che compongono il vostro sito web, ogni informazione nella sessione persisterà. Quindi questo significa che i dati memorizzati nella sessione di una pagina poi si può accedere da un'altra pagina. La memorizzazione delle informazioni in una sessione è facile, e lo facciamo con il simbolo del dollaro, sottolineatura, variabile SESSION capitale. Segno di dollaro, sottolineano, SESSION, proprio come il simbolo del dollaro, sottolineatura, GET e segno di dollaro, sottolineatura, POST- è un array associativo costituito da coppie di valori chiave. Così possiamo utilizzare una sintassi simile a simbolo del dollaro, sottolineatura, SESSION, staffa, citazione, foo, citazione, staffa, uguale, citazione, bar, quote- per memorizzare il valore "barra" nella chiave "foo". Tuttavia, prima di poter scrivere o leggere dalla matrice sessione, abbiamo bisogno di chiamare una funzione speciale sessione, sottolineano, avviare, () - e questo inizializzare la sessione. Quindi diamo un'occhiata a un esempio. La nostra prima pagina, hello.php, utilizza la sessione di uscita alcuni dati all'utente. Ricordate, avremo bisogno di usare session_start prima di poter accedere a tutti i dati di sessione. Ora stiamo usando isset di PHP per determinare se una chiave esiste nel array associativo $ _SESSION. Se tale chiave esiste, significa che l'utente ha effettuato l'accesso, quindi verranno visualizzati il ​​nome dell'utente. Se tale chiave non è impostata, significa che l'utente non ha ancora effettuato l'accesso, così noi visualizzeremo un link a login.php. Quindi diamo un'occhiata a login.php. Quaggiù, abbiamo un unico form HTML con un solo ingresso. Attributo di azione del modulo è di $ _SERVER ['PHP_SELF'], e questo significa semplicemente che vogliamo che il modulo da presentare al file corrente, che, in questo caso, è login.php. Quindi torniamo all'inizio di questo file. Se l'utente ha presentato il modulo, quindi $ _POST ['name'] deve essere impostato. Per ulteriori informazioni sui moduli HTML e posta, controllare il video Sviluppo Web PHP. Nel caso in cui l'utente ha fatto inviare il modulo, vorremmo scrivere il valore che essi digitato nella sessione. Ora siamo in grado di reindirizzare l'utente a hello.php. Perché abbiamo memorizzato l'input dell'utente nella sessione, hello.php sarà in grado di accedere al valore che è stato impostato in login.php. Quindi cerchiamo di controllare questo fuori in un browser web. In primo luogo, ci naviga http://localhost/hello.php. Possiamo vedere qui che non abbiamo ancora effettuato l'accesso, quindi cerchiamo di fare clic sul collegamento di accesso, che ci reindirizzare login.php. Ok, io digito il mio nome, che verrà poi memorizzato nella sessione. Ottimo! Ora possiamo vedere il mio input da login.php sul hello.php via la sessione. Quindi, per quanto riguarda la registrazione che l'utente fuori? Ebbene, al fine di registrare l'utente, abbiamo semplicemente memorizzato un valore in nome di sessione. Quindi, per disconnettere l'utente, abbiamo semplicemente bisogno di rimuovere quella chiave nome dalla matrice sessione. Quindi, diamo uno sguardo a questo ultimo file, logout.php. Ancora una volta, avremo bisogno di chiamare session_start () prima di poter fare qualsiasi cosa che riguarda sessione. Ora possiamo semplicemente chiamare session_destroy (), che si prenderà cura di sbarazzarsi di tutti i dati della sessione e quindi reindirizzare l'utente alla hello.php. Quindi, se clicco sul link Log out, possiamo vedere che il server ha dimenticato chi sono, e io non sto logged Allora, cosa sta succedendo qui sotto il cofano? Al fine di ottenere il comportamento che abbiamo appena visto, il nostro server ha bisogno di fare 2 cose. In primo luogo, il server deve memorizzare in qualche modo i dati della sessione. I vari file PHP che compongono un sito web vengono eseguiti come invocazioni separati dell'interprete PHP variabile in modo locale non può essere condiviso tra di loro. Al contrario, il server deve memorizzare i nostri dati di sessione in qualche luogo che più. file php possono accedere. In secondo luogo, il server deve associare i dati della sessione solo con la mia sessione di navigazione. Quando faccio il login a Facebook, probabilmente ci sono milioni di altre persone anche collegato a Facebook allo stesso tempo. Ma il server ha bisogno di qualche modo di associare i miei dati con la mia sessione corrente e dati di qualcun altro con un'altra sessione. Per fortuna, di PHP gli autori pensato tutto questo per noi, quindi non abbiamo bisogno di attuare tutto questo noi stessi. Ma diamo un'occhiata a ciò che PHP fa per impostazione predefinita. Quando visito una pagina PHP contenente session_start per la prima volta, PHP genererà un grande valore casuale. Fino session_destroy si chiama-o io non visitare le pagine PHP su quel sito per un po- tale valore casuale e probabilmente unica sarà associato a me. In questo modo il server ha un modo di identificare la mia sessione di navigazione al contrario di qualcun altro. Siamo in grado di dare uno sguardo al ID sessione corrente utilizzando la funzione PHP, session_id. Qui stiamo semplicemente in uscita il valore della nostra identificatore di sessione. Quindi, se abbiamo ancora accedere al web app esempio, e ora navigare sessid.php, vedremo questa lunga stringa di caratteri, e questo è l'identificatore di corrente per la mia sessione, ed è così che il server tiene traccia di chi sono. Va bene, ma abbiamo risolto solo metà del problema. Certo, il server ha ora un modo di identificare me, ma quando mi trovo a visitare un'altra pagina, il server ha bisogno di riutilizzare lo stesso identificatore invece di generare una nuova. Ricordate, se dichiaro una variabile locale in foo.php e poi visitare bar.php, bar.php non ha modo di sapere cosa è successo in foo.php. Così l'implementazione sessione php predefinita richiede che il browser ricorda il server che session ID da utilizzare. Questo è implementato nella forma di un biscotto. Un cookie-oltre ad essere un delizioso snack- è semplicemente un piccolo file di testo sul computer che un server può scrivere tramite il browser web. Così, dopo PHP genera il mio ID di sessione univoco tramite session_start, sta andando a dire al browser web per memorizzare tale identificatore in un file di testo locale, o un biscotto. Poi il browser web includerà che identificativo in ogni richiesta che rende al server. Quindi, in realtà, il web server non è ricordare chi sono. Invece, il browser web è semplicemente ricordando l'identificatore unico che è stato generato da PHP e quindi costantemente ricordando il server che cosa identificatore è. In questo modo, le informazioni come il mio nome utente è memorizzato sul server non è il mio browser web. Il browser indica semplicemente il server in cui PHP memorizzate le informazioni così PHP può recuperare. In modo che pone la questione, in cui è PHP in realtà memorizzando queste informazioni? Per impostazione predefinita, il PHP archiviare i dati di sessione in un file all'interno di / tmp, o la cartella 'Temp'. Il nome di quel file conterrà l'ID di sessione in modo PHP in grado di determinare il file da leggere e scrivere da via solo l'ID di sessione. Bene. Quindi cerchiamo di aprire la scheda Rete nel debugger di Chrome tramite l'icona della chiave inglese in alto a destra. Ora diamo testa a hello.php di nuovo. Clicchiamo sulla richiesta HTTP per hello.php e quindi fare clic su intestazioni. Qui possiamo vedere che l'intestazione cookie contiene una chiave denominata PHPSESSID, o una sessione PHP-ID con un valore che è la stessa stringa lunga che abbiamo visto quando abbiamo visitato sessid.php. Questo è esattamente come il browser sta ricordando al server quale ID di sessione dovrebbe essere usato. E 'compreso in un header HTTP. Bene. Torniamo al terminale. Facciamo navigare a / tmp, dove PHP memorizza le informazioni di sessione per impostazione predefinita. Certo, basta, all'interno di questa cartella temporanea, ecco un file che contiene lo stesso ID di sessione esatto. Se apriamo il file, possiamo vedere come il PHP sta rappresentando la mia sessione su disco. Qui la stringa "Tommy" è stato archiviato per la chiave 'nome' che è esattamente quello che ci aspettavamo. E questo è un quadro di sessioni in PHP. Quello che abbiamo appena visto è stato solo l'implementazione predefinita di sessioni. In realtà, molti siti web modificare questo comportamento predefinito per memorizzare le sessioni PHP in modo più efficiente nell'interesse di migliorare le prestazioni. Il mio nome è Tommy, e questo è CS50. [CS50.TV]