[Powered by Google Translate] [PHP Sesións] [Tommy MacWilliam, Harvard University] [Isto é CS50.] [CS50.TV] Sesións en PHP se pode usar para aplicar a función, como logins de usuarios, na súa aplicación web. Sesións PHP permiten asociar información con toda a sesión de navegación do usuario en vez de simplemente unha única páxina. Entón iso significa que o usuario visita varias páxinas PHP que compoñen a súa web, calquera información na sesión persistirá. Entón, o que significa que os datos almacenados na sesión de unha páxina máis tarde se pode acceder por outra páxina. Almacenando información nunha sesión é doado, e facémolo a través do sinal de dólar, subliñado, variable SESSION capital. Cifrão, subliñado, SESSION, exactamente como cifrão, subliñado, GET e sinal de dólar, subliñado, pos- é un array asociativo contén pares de valores clave. Así, podemos usar cifrão sintaxis-like, subliñado, SESSION, soporte, multimedia, foo, multimedia, soporte, é igual a, multimedia, bar, cotización en para almacenar o valor "bar" na clave "foo". Con todo, antes de podermos escribir ou ler a partir da matriz de sesión, imos ter chamar a unha función-especial sesión, subliñado, comezar () - e isto pode inicializar a sesión. Entón, imos dar un ollo a un exemplo. A nosa primeira páxina, ola.php, usa a sesión para a saída de algúns datos para o usuario. Lembre, nós imos ter usar session_start antes de que poidamos acceder os datos de sesión. Agora estamos usando isset de PHP para determinar se unha chave existe na matriz asociativa $ _SESSION. Se esa clave existir, isto significa que o usuario rexistrado, entón imos ver o nome do usuario. Se esta chave non está definido, isto significa que o usuario non teña rexistrado con todo, entón imos ver unha ligazón a login.php. Entón, imos dar un ollo a login.php. Por aquí, temos un formulario HTML sinxelo cunha única entrada. Atributo action do formulario é de R $ _SERVER ['PHP_SELF'], e iso significa simplemente que queremos que o formulario sexa enviado ao arquivo actual, que, nese caso, é login.php. Entón, imos volver ao inicio deste ficheiro. O usuario enviar o formulario, a continuación, $ _POST ['nome'] debe ser definido. Para máis información sobre formularios HTML e post, Escribe o vídeo Desenvolvemento web PHP. No caso de que o usuario fixo enviar o formulario, nós queremos escribir o valor que escriba na sesión. Agora podemos redireccionar o usuario para ola.php. Porque temos gardado a entrada do usuario para a sesión, ola.php poderá acceder o valor que se definiu en login.php. Entón, imos comprobar iso nun navegador web. En primeiro lugar, imos navegar ata http://localhost/ola.php. Podemos ver aquí que non se identificou, con todo, entón imos premer na ligazón de rexistro, que pode redireccionar connosco login.php. Ok, eu vou escribir o meu nome, que será, entón, almacenados na sesión. Gran! Agora podemos ver a miña entrada de login.php en ola.php vía a sesión. Entón, o que dicir de deslogar o usuario? Así, a fin de rexistrar o usuario en, simplemente almacenado un valor en nome da sesión. Entón, para rexistrar o usuario para fóra, nós simplemente necesitamos eliminar esa clave de nome a partir da matriz de sesión. Entón, imos dar un ollo neste último arquivo, logout.php. Unha vez máis, imos ter que chamar session_start () antes de que poidamos facer calquera cousa relacionada sesión. Agora podemos simplemente chamar session_destroy () que vai coidar de se librar de todos os datos da sesión e logo, redireccionar ao usuario de volta a ola.php. Entón, se eu premer na ligazón Saír, vemos que o servidor teña esquecido quen eu son, e eu xa non estou conectado Pol Entón, o que está pasando aquí debaixo do capo? Co fin de obter o comportamento que acabamos de ver, noso servidor que facer 2 cousas. En primeiro lugar, o servidor ten que gardar dalgunha forma, os datos da sesión. Os distintos ficheiros PHP que compoñen un sitio son executados como invocacións distintas do intérprete PHP variable para local non pode ser compartido entre eles. Pola contra, o servidor precisa para almacenar os nosos datos da sesión en algún lugar que múltiples. php pode acceder. En segundo lugar, o servidor ten que asociar os datos da sesión con só a miña sesión de navegación. Cando entrar no Facebook, probablemente hai millóns de outras persoas tamén conectado a Facebook, á vez. Pero o servidor precisa algunha forma de asociar os meus datos coa miña actual sesión e os datos de outra persoa con outra sesión. Por sorte, os autores de PHP pensou en todo isto para nós, de xeito que non precisa aplicar nada diso nós mesmos. Pero imos dar un ollo ao que o PHP fai por omisión. Cando visitar unha páxina PHP contén session_start por primeira vez, PHP pode xerar un valor aleatorio de grande porte. Ata session_destroy chámase ou eu non visitar as páxinas PHP nese sitio por un tempo- ese valor aleatorio e probablemente único será asociado con me. Desa forma, o servidor ten algunha forma de identificar a miña sesión de navegación en oposición a outra persoa. Podemos tomar un ollar para o ID da sesión actual usando a función PHP, session_ID. Aquí estamos simplemente a saída o valor do noso identificador de sesión. Entón, se nós de novo sesión para o web app exemplo, e agora navegar a sessid.php, imos ver esa longa secuencia de caracteres, e iso é o identificador actual para a miña sesión, e é así que o servidor é manter o control de quen eu son. Ok, pero só xa resolveu a metade do problema. Por suposto, o servidor agora ten algunha forma de me identificar, pero cando visitar outra páxina, o servidor ten que reutilizar ese mesmo identificador en vez de xerar un novo. Teña en conta que, se eu declarar unha variable local en foo.php e despois visita bar.php, bar.php ten ningunha forma de saber o que pasou no foo.php. Así, a posta en marcha sesión php estándar require que o navegador lembrar o servidor cal sesión ID para usar. Isto é aplicado en forma de un biscoito. Unha cookie-ademais de ser un delicioso lanche- é simplemente un pequeno arquivo de texto no teu ordenador que un servidor pode escribir a vía navegador web. Entón, despois de PHP xera miña sesión exclusiva de identificación vía session_start, que vai dicir o navegador web para almacenar este identificador nun arquivo de texto local, ou unha cookie. A continuación, o navegador web debería incluír este identificador en cada solicitude que fai que o servidor. Entón, realmente, o servidor web non é lembrar quen eu son. Pola contra, o navegador web é simplemente lembrar o identificador único que foi xerado polo PHP e logo, constantemente lembrando o servidor o que este identificador é. Desta forma, a información como o meu nome de usuario é almacenado no servidor non é o meu navegador. O navegador simplemente di ao servidor onde PHP almacenada a información así PHP pode recuperalo. Así que levanta a cuestión: onde está o PHP realmente almacenar esa información? Por defecto, o PHP pode almacenar os datos da sesión nun arquivo dentro / tmp, ou o cartafol 'tempo'. O nome do ficheiro que debería incluír o ID da sesión para que o PHP pode determinar o ficheiro para ler e escribir a partir de vía só o ID de sesión. Todo ben. Entón, imos abrir a guía Rede no depurador de Chrome a través da icona de chave inglesa na esquina superior dereita. Agora imos ir ao ola.php novo. Imos facer clic sobre a solicitude HTTP para ola.php e, en continuación, prema en cabeceiras. Aquí podemos ver que a cabeceira cookie contén unha chave chamada PHPSESSID, ou sesión PHP ID-cun valor que é que mesma secuencia moito tempo vimos cando visitamos sessid.php. Isto é exactamente como o navegador está lembrando o servidor que ID de sesión debe ser usado. É inclui-lo en unha cabeceira HTTP. Todo ben. Imos volver para o terminal. Imos ir a / tmp, onde o PHP está almacenando a información da sesión, por defecto. Seguramente, dentro deste cartafol temporal, aquí está un arquivo que contén o mesmo ID da sesión exacta. Se abrir este ficheiro, podemos ver como o PHP está representando a miña sesión no disco. Aquí, a cadea "Tommy" está a ser almacenado para a chave 'nome' que é o que nós esperabamos. E iso é unha visión xeral de sesións en PHP. O que acabamos de ver foi só a implementación estándar de sesións. De feito, moitos sitios cambiar este comportamento predeterminado para gardar as sesións PHP máis eficiente no interese de mellorar o rendemento. O meu nome é Tommy, e esa é CS50. [CS50.TV]