[Powered by Google Translate] [PHP Sesiones]
[Tommy MacWilliam, la Universidad de Harvard]
[Este es CS50.] [CS50.TV]
Sesiones en PHP se pueden utilizar para implementar la funcionalidad,
como los inicios de sesión de los usuarios, en su aplicación web.
Sesiones de PHP le permiten asociar información
con toda la sesión de navegación del usuario
en lugar de limitarse a una sola página.
Así que eso significa que el usuario visita varias páginas PHP que componen su sitio web,
cualquier información en la sesión persistirá.
Así que eso significa que los datos almacenados en la sesión por una página
más tarde se puede acceder por otra página.
El almacenamiento de información en una sesión es fácil,
y lo hacemos a través de la muestra de dólar, subrayado, variable SESSION capital.
Signo de dólar, subrayan, SESIÓN-al igual que el signo de dólar, el subrayado, GET
y el signo de dólar, subrayado, POST-
es un array asociativo consistente en pares de valores clave.
Así que podemos usar el signo de dólar-como sintaxis, subrayado, REUNIÓN,
soporte, cita, comida, cita, soporte, es igual, cita, bar, cita-
para almacenar el "bar" valor en la clave "foo".
Sin embargo, antes de poder escribir o leer de la matriz de la sesión,
tendremos que llamar a una función especial
sesión, subrayan, iniciar, () -
y esto va a inicializar la sesión.
Así que echemos un vistazo a un ejemplo.
Nuestra primera página, hello.php, utiliza la sesión a la salida de algunos datos para el usuario.
Recuerde, nosotros tendremos que usar session_start antes de poder acceder a los datos de la sesión.
Ahora estamos utilizando isset de PHP para determinar si existe una clave
en el array asociativo $ _SESSION.
Si existe esa llave, eso significa que el usuario ha iniciado la sesión,
así que vamos a mostrar el nombre del usuario.
Si no se establece esa llave, eso significa que el usuario no ha iniciado sesión todavía,
así que mostraremos un enlace a login.php.
Así que echemos un vistazo a login.php.
Aquí abajo, tenemos un único formulario HTML con una sola entrada.
Atributo action del formulario es de $ _SERVER ['PHP_SELF'],
y esto simplemente significa que queremos que el formulario que se presentará a la imagen actual,
que, en este caso, es login.php.
Así que vamos a volver a la parte superior de este archivo.
Si el usuario envía el formulario, a continuación, $ _POST ['name'] se debe establecer.
Para obtener más información acerca de los formularios HTML y post,
ver el video de Desarrollo Web PHP.
En el caso de que el usuario hizo enviar el formulario,
nos gustaría escribir el valor que ellos escriben en en la sesión.
Ahora podemos redirigir al usuario a hello.php.
Debido a que hemos almacenado la entrada del usuario en la sesión,
hello.php podrán acceder al valor que se estableció en login.php.
Así que vamos a ver esto en un navegador web.
En primer lugar, vamos a navegar a http://localhost/hola.php.
Podemos ver aquí que no hemos registrado todavía,
así que vamos a hacer clic en el enlace de inicio de sesión, lo que nos redirigirá a login.php.
Está bien, te escribo en mi nombre, que luego se almacena en la sesión.
Great! Ahora podemos ver a mi entrada de login.php en hello.php a través de la sesión.
Así que, ¿qué pasa con el registro al usuario salir?
Bueno, con el fin de registrar el usuario que, simplemente guardaron un valor en nombre de la sesión.
Así que para registrar el usuario fuera, simplemente tenemos que quitar esa clave de nombre
de la matriz de la sesión.
Así que echemos un vistazo a este último archivo, logout.php.
Una vez más, tendremos que llamar a session_start ()
antes de que podamos hacer cualquier cosa relacionada con la sesión.
Ahora podemos simplemente llamar session_destroy (),
que se encargará de deshacerse de todos los datos de la sesión
y luego redireccionar al usuario a hello.php.
Así que si hago clic en el enlace de la sesión,
podemos ver que el servidor se ha olvidado de lo que soy,
y ya no estoy logged in
Entonces, ¿qué está pasando aquí debajo de la capucha?
Con el fin de obtener el comportamiento que acabamos de ver,
nuestro servidor tiene que hacer 2 cosas.
En primer lugar, el servidor necesita para almacenar de alguna forma los datos de la sesión.
Los diferentes archivos PHP que componen una página web
se ejecutan como invocaciones separadas del intérprete PHP
variable, de forma local no se puede compartir entre ellos.
En su lugar, el servidor necesita para almacenar nuestros datos de la sesión
en algún lugar que múltiples. php pueden acceder.
En segundo lugar, el servidor tiene que asociar los datos de la sesión sólo con mi sesión de navegación.
Cuando me conecto a Facebook,
probablemente hay millones de otras personas también conectado a Facebook al mismo tiempo.
Sin embargo, el servidor necesita alguna manera de asociar mis datos
con mi actual período de sesiones y los datos de otra persona con otra sesión.
Por suerte, los autores de PHP pensaban acerca de todo esto para nosotros,
así que no tenemos que poner en práctica todo esto nosotros mismos.
Pero echemos un vistazo a lo que PHP hace por defecto.
Cuando visito una página PHP que contiene session_start por primera vez,
PHP generar un gran valor aleatorio.
Hasta session_destroy se llama-o yo no visitar las páginas PHP en ese sitio por un tiempo-
ese valor aleatorio y probablemente único se asociará a mí.
De esta forma el servidor tiene alguna forma de identificar mi sesión de navegación
en lugar de otra persona.
Podemos echar un vistazo a la identificación de la sesión actual
utilizando la función de PHP, SESSION_ID.
Aquí estamos simplemente emitir el valor de nuestro identificador de sesión.
Así que si volvemos a iniciar sesión en la aplicación de ejemplo web,
y ahora navegar hasta sessid.php,
vamos a ver esta larga cadena de caracteres,
y ese es el identificador actual de mi sesión,
y así es como el servidor es hacer el seguimiento de lo que soy.
Está bien, pero sólo hemos solucionado la mitad del problema.
Claro, el servidor ahora tiene alguna forma de identificarme,
pero en mi visita a otra página, el servidor tiene que volver a utilizar el mismo identificador
en lugar de generar una nueva.
Recuerde, si yo declaro una variable local en foo.php
ya continuación, visite Bar.php,
Bar.php no tiene manera de saber lo que ocurrió en foo.php.
De modo que la aplicación de sesiones php predeterminada requiere que el navegador recuerde al servidor
que el ID de sesión para usar.
Esto se implementa en forma de una galleta.
Una cookie-además de ser una deliciosa merienda-
es simplemente un pequeño archivo de texto en su computadora
que un servidor puede escribir a través del navegador web.
Así que después de PHP genera mi única identificación de la sesión a través de session_start,
que va a decirle al navegador web para almacenar dicho identificador en un archivo de texto local, o una galleta.
A continuación, el navegador web incluirá ese identificador en cada petición
que hace al servidor.
Así que en realidad, el servidor web no es recordar quién soy.
En cambio, el navegador web es simplemente recordando el identificador único
que fue generada por PHP y luego recordando constantemente el servidor
lo que es el identificador.
De esta manera, la información al igual que mi nombre de usuario se almacena en el servidor, no el navegador web.
El navegador simplemente le dice al servidor donde PHP almacena esa información
por lo que PHP puede recuperarla.
Así que plantea la pregunta, ¿dónde está realmente PHP almacenando esta información?
Por defecto, PHP almacenar su datos de sesión
en un archivo dentro de / tmp, o en la carpeta "temp".
El nombre de ese archivo se incluirá la identificación de la sesión por lo que PHP puede determinar
qué archivo a leer y escribir a través de sólo el identificador de sesión.
Está bien. Así que vamos a abrir la ficha Red en el depurador de Chrome
a través del icono de llave inglesa en la parte superior derecha.
Ahora vamos a la cabeza a hello.php nuevo.
Vamos a hacer clic sobre la solicitud HTTP para hello.php
y luego haga clic en encabezados.
Aquí podemos ver que el encabezado de cookie contiene una clave llamada PHPSESSID,
o sesión de PHP-ID con un valor que es esa misma larga cadena que vimos
cuando visitamos sessid.php.
Así es exactamente como el navegador está recordando al servidor qué ID de sesión se debe usar.
Está incluida en un encabezado HTTP.
Está bien. Volvamos a la terminal.
Vamos a navegar a / tmp, donde PHP almacena la información de la sesión por defecto.
Efectivamente, en el interior de esta carpeta temporal,
aquí hay un archivo que contiene exactamente el mismo ID de sesión.
Si abrimos el archivo, podemos ver como PHP está representando mi sesión en el disco.
Aquí la cadena "Tommy" se está almacenando para la clave 'nombre'
que es exactamente lo que estábamos esperando.
Y eso es una visión general de las sesiones en PHP.
Lo que acabamos de ver fue sólo la implementación predeterminada de sesiones.
De hecho, muchos sitios web cambian este comportamiento predeterminado
para almacenar las sesiones de PHP de manera más eficiente
en el interés de mejorar el rendimiento.
Mi nombre es Tommy, y esto es CS50.
[CS50.TV]