[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]