Post Top Ad

Your Ad Spot

miércoles, 19 de agosto de 2020

Cookies y sesiones de PHP

 cookies php


Así que hemos echado un vistazo a cómo se pueden pasar datos en PHP. Cuando se trata de URL y enlaces, normalmente trabajamos con datos a través de la $_GETmatriz súper global. Si, por otro lado, necesitamos procesar datos que se han enviado a través de un formulario HTML, esto generalmente se hace con alguna forma de $_POSTprocesamiento súper global. Hay otra forma de trabajar con datos variables, y es mediante el uso de cookies y sesiones . Estas dos técnicas son inmensamente útiles por muchas razones. Uno de los más importantes es el mantenimiento del estado . Como aprendimos en nuestra divertida lección sobre códigos de estado http, http es un protocolo sin estado. Esto significa que no mantiene una memoria, por así decirlo, de cada ciclo de respuesta de solicitud. Usando sesionescookies , esto se puede superar y las aplicaciones web se pueden personalizar mejor para el usuario. ¡Saltemos!


La importancia de las cookies

Las cookies, como probablemente sepa, son pequeños fragmentos de datos que se almacenan en su navegador web. Esto es lo que ayuda a almacenar el estado de un usuario Esto permite que el sitio identifique al usuario y recuerde una acción específica que haya realizado en la página. Las cookies también se utilizan para identificar cuando muchos HTTPlas solicitudes las realiza el mismo usuario. Podría pensar que una dirección IP proporcionaría esta capacidad para determinar la unicidad, pero este no es el caso. Piense en los miles de usuarios que se encuentran detrás de un firewall de la empresa o un dispositivo de traducción de direcciones de red NAT. Todos esos usuarios realizarán solicitudes desde la misma dirección IP exacta. Las cookies pueden aportar una sensación de coherencia. Ahora las cookies se basan en el protocolo HTTP incluso para ser posibles. Se aprovechan del ciclo de respuesta a la solicitud. Los servidores web no pueden configurar ni leer cookies hasta que se realice una solicitud.

Ejemplo de solicitud de respuesta

OBTENER /thepage.php HTTP / 1.1
Host: www.vegibit.com
Aceptar: * / *
HTTP / 1.1 200 OK
Tipo de contenido: texto / html
Conjunto de cookies: user_id = 777

Aquí, cuando se realiza la solicitud, el servidor responde con la página; sin embargo, en el encabezado HTTP utiliza el Set-Cookiecomando para configurar una cookie en el navegador del usuario. Luego, el navegador almacena esa cookie en la computadora local para usarla en el futuro. Supongamos que el usuario realiza otra solicitud de una página diferente en el mismo sitio. Esta vez, cuando realice la solicitud, HTTP GET incluirá las cookies de ese sitio en el encabezado HTTP del servidor web. Una segunda solicitud podría tener este aspecto.


OBTENER /theotherpage.php HTTP / 1.1
Host: www.vegibit.com
Cookie: user_id = 777
Aceptar: * / *

Observe cómo cuando esta solicitud se apaga, el servidor web ya sabrá que esta solicitud proviene de user_id 777. Así es como los sitios web recuerdan su nombre de usuario, inician sesión , etc. Las cookies siempre se aprovechan del ciclo de respuesta de solicitud estándar. Si no está moviendo un escenario de respuesta de solicitud, entonces no está trabajando con ninguna cookie. Esto se debe a que todo asunto de configuración y lectura de cookies ocurre en los encabezados HTTP que hacen ping entre el servidor web y el navegador del usuario. No hay forma de configurar o recibir una cookie sin que ocurra una solicitud o respuesta HTTP.


La $ _COOKIE Super Global

Al igual que aprendimos con $_GET_$POST, las variables súper globales almacenan un rango de información en una matriz asociativa. Por supuesto, cuando se trata de enlaces y URL de los que estamos hablando $_GETy cuando se trata de envíos de formularios, estamos hablando $_POSTCuando llega el momento de tratar con las cookies, que recuerdan que son parte del ciclo de respuesta de la solicitud HTTP, podemos almacenar esta información en $_COOKIESuper Global y funciona de manera similar a las demás.


Configuración de valores de cookies

PHP nos brinda una función dedicada para configurar cookies. La firma se ve así.

setcookie$name$value$expire)

Como podemos ver, la función toma tres valores. Un nombre, un valor y un vencimiento. Los parámetros de nombre y valor son el par clave-valor del nombre de la cookie y el valor que almacena. El último argumento se refiere a la cantidad de tiempo que le gustaría que persista la cookie. Así que pongámonos ocupados poniendo algunas cookies.

Los dos primeros argumentos son bastante fáciles de manejar. El tercero puede ser un poco complicado si no está acostumbrado. Al establecer un tiempo de vencimiento para una cookie, el servidor debe enviar una marca de tiempo UNIX como valor. La forma más fácil de hacer esto es hacer que PHP genere la hora actual en una marca de tiempo UNIX, luego agregue la cantidad de tiempo que desea que persista esa cookie en función de la hora actual. Las marcas de tiempo de UNIX son precisas al segundo, por lo que cuando agregamos tiempo a la marca de tiempo, también debe ser precisa al segundo. En otras palabras, al agregar el período de tiempo a la marca de tiempo, debe hacerlo en segundos. Entonces, si desea que una cookie dure una semana, debe proporcionar el número de segundos en una semana, que es 604800. La otra forma de hacer esto, que es mucho más común, es usar las matemáticas para calcular la cantidad de tiempo necesitar. Así es como lo hicimos arriba. Ayuda hablarlo. Tenemos 60 segundos en un minuto, 60 minutos en una hora, 24 horas en un día, siete días en una semana para llegar al mismo 604800.

Nota: Cuando este código PHP se ejecute, le indicará al servidor que envíe esta cookie en el encabezado de respuesta HTTP. Esto es importante. Recuerde que los encabezados se envían antes que cualquier otra cosa en la página. En ausencia de almacenamiento en búfer de salida, esto significa que cada vez que desee establecer una cookie, debe hacerlo en la parte superior de la página para que se incluya en el encabezado enviado al cliente. Es mejor utilizar cookies para información no sensible. Dado que se pueden ver y piratear libremente, las cookies tienen sentido para las conveniencias simples de la experiencia del usuario, pero no para las partes críticas de la aplicación.


Lectura de valores de cookies

Es un poco extraño que cuando hablamos de cookies, hablemos de ellas en plural. ¿Por qué es esto un poco extraño? Es así porque cuando queremos establecer y recuperar datos del $_COOKIEsúper global, ¡tenga en cuenta que es singular! En cualquier caso, intentemos echar un vistazo a la cookie que se estableció en el fragmento de código anterior donde configuramos Score en 575.

¡Ah, ja! Aquí simplemente hacemos una impresión bonita de lo$_COOKIEsúper global, pero en casos de uso más comunes, estaría usando la clave real para recuperar el valor específico que está buscando. Veamos un ejemplo de las preferencias del usuario. Vamos a hacer algunas cosas diferentes en este ejemplo. En primer lugar, vamos a establecer el nombre, el valor y la caducidad en la propia llamada a la función. También le daremos a estas galletas una vida útil ridículamente pequeña, que es de 5 segundos. Por último, usaremos las claves reales de$_COOKIESuper Global para recuperar valores solo si están presentes.

Ciclo de respuesta a la primera solicitud

¡Hola, no hay valor! - ¡Te gustan las cosas que no tienen valor! en color y para comer ¡Sin valor! ¡Comida!

Oye, espera un minuto, parece que estas cookies no existen o que no informan ningún valor dentro de ellas. Intentemos lo mismo de nuevo, 4 segundos después.

Hola, Chris: te gustan las cosas de color azul y también la comida italiana.

Ahí vamos, ahora los valores están teniendo lugar. Vale la pena mirar los encabezados para ver esto en acción. Esto es lo que sucede cuando se carga la página por primera vez en el navegador web.

Solicitud

http: //localhost/bootstrapsandbox/cookies.php

OBTENER /bootstrapsandbox/cookies.php HTTP / 1.1
Host: localhost
Aceptar: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Accept-Language: en-US, en; q = 0.5
Aceptar codificación: gzip, desinflar
Conexión: mantener vivo

Respuesta

HTTP / 1.1 200 OK
Fecha: martes, 14 de octubre de 2014 16:43:01 GMT
Servidor: Apache / 2.4.4 (Win32) PHP / 5.4.16
X-Powered-By: PHP / 5.4.16
Set-Cookie: Name=Chris; expires=Tue, 14-Oct-2014 16:43:06 GMT
Set-Cookie: Color=Blue; expires=Tue, 14-Oct-2014 16:43:06 GMT
Set-Cookie: Food=Italian; expires=Tue, 14-Oct-2014 16:43:06 GMT
Contenido-Longitud: 100
Keep -Alive: timeout = 5, max = 100
Connection: Keep-Alive
Tipo de contenido: texto / html

Salida del navegador

¡Hola, no hay valor! - ¡Te gustan las cosas que no tienen valor! en color y para comer ¡Sin valor! ¡Comida!

Ahora podemos cargar la misma página solo un par de segundos después y ver el resultado.

Solicitud

http: //localhost/bootstrapsandbox/cookies.php

OBTENER /bootstrapsandbox/cookies.php HTTP / 1.1
Host: localhost
Aceptar: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Accept-Language: en-US, en; q = 0.5
Aceptar codificación: gzip, desinflar
Cookie: Name=Chris; Color=Blue; Food=Italian
Conexión: mantener vivo

Respuesta

HTTP / 1.1 200 OK
Fecha: martes, 14 de octubre de 2014 16:48:05 GMT
Servidor: Apache / 2.4.4 (Win32) PHP / 5.4.16
X-Powered-By: PHP / 5.4.16
Set-Cookie: Nombre = Chris; expira = Tue, 14-Oct-2014 16:48:10 GMT
Set-Cookie: Color = Azul; expires = Tue, 14-Oct-2014 16:48:10 GMT
Set-Cookie: Comida = Italiano; expires = Tue, 14-Oct-2014 16:48:10 GMT
Longitud del contenido: 89
Keep-Alive: timeout = 5, max = 96
Conexión: Keep-Alive
Tipo de contenido: texto / html

Salida del navegador

Hola, Chris: te gustan las cosas de color azul y también la comida italiana.

¡Excelente! Esto realmente marca dónde encajan las cookies durante el ciclo de respuesta a la solicitud. Tenga en cuenta que en la primera respuesta a la solicitud, no vemos los valores de las cookies. Esto se debe a que no es hasta que se realiza al menos una solicitud que el servidor puede incluso configurar una cookie o cookies en primer lugar. En el segundo ciclo de respuesta a la solicitud , la solicitud lleva las cookies al servidor en el encabezado . Por lo tanto, PHP puede conectarse a esas cookies en la solicitud entrante, extraer los valores de ellas y luego enviar la respuesta. La conclusión: $_COOKIESuper Global tiene valores de la solicitud anterior , no cambia al configurar la cookie. ¡Muy hábil! .


Anulación de valores de cookies

Ahora que sabemos cómo configurar cookies y hacer uso de ellas, exploremos cómo deshacernos de ellas usando PHP. No es tan simple como usar la unset()función que podría probar con una variable estándar. Piénselo, el navegador busca cookies, llena la cookie súper global, envía la solicitud al servidor y luego la desarmamos. Bueno, cada vez que el usuario realiza una solicitud, volverá a enviar las cookies presentes directamente al servidor web. Entonces, para desarmar una cookie, queremos usarla setcookie()una vez más, pero de una manera especial.

Ahora, si comentamos el código que configura nuestras cookies, todavía obtenemos el valor almacenado en esas cookies.

Desarmemos las cookies de Nombre y Comida ahora.

¡Imponente! Al pasar un valor nulo al segundo parámetro y un tiempo en el pasado al tercer parámetro, podemos eliminar con éxito las cookies del navegador del usuario. Solo tenga en cuenta que es la segunda solicitud donde esto realmente surte efecto.


Sesiones en PHP

Las sesiones son herramientas realmente excelentes para administrar el estado y están relacionadas con las cookies. La diferencia clave es que cuando piensa en una sesión, debe pensar en el lado del servidor. Las cookies son estrictamente del lado del navegador. Una sesión es un archivo que se almacena en el servidor web. Luego, el servidor web envía una cookie al usuario que hace referencia a ese archivo de sesión. ¿Ves cómo funciona? Es como un proceso de dos pasos donde el archivo en el servidor y la cookie en el navegador trabajan juntos para mantener el estado o compartir información. Hay algunos pros y contras de cada enfoque, así que echemos un vistazo.

Pros de la sesión

  • Más almacenamiento Una cookie solo puede contener unos 4000 caracteres como máximo. Puede ir más allá según sea necesario con las sesiones.
  • Tamaños de solicitud más pequeños Al almacenar la sesión en el servidor, no es necesario colocar todos estos datos en la cookie para cada solicitud HTTP.
  • Oculta los valores de los datos No puede leer el valor de una cookie de sesión como puede hacerlo con una cookie estándar en el navegador.
  • Más seguro Dado que los valores están ocultos, son menos propensos a la piratería.

Contras de la sesión

  • Más lento para acceder Son un poco más lentos, sin embargo, nunca lo notará. Estamos hablando de milisegundos aquí.
  • Caduca inmediatamente al cerrar el navegador Una vez que un usuario cierra su navegador, la sesión finaliza.
  • Los archivos de sesión se acumulan Dado que las sesiones no caducan realmente, tienden a acumularse en el servidor web. Deberán eliminarse manualmente con el tiempo.

Una cosa a tener en cuenta con las sesiones en PHP es que los valores se pueden establecer y recuperar en el mismo ciclo de respuesta a la solicitud. Vimos que esto no es posible mediante el uso de cookies estándar. ¿Por qué es esto? Esto se debe a que con las cookies normales, el servidor web debe llegar al navegador del usuario a través de HTTP para establecer u obtener valores de las cookies. Con sesiones, este paso se puede eliminar. PHP y el servidor web funcionan directamente con un archivo de sesión almacenado en el propio servidor web, luego se envía una cookie al usuario con una referencia a ese archivo. De muchas maneras, esto hace que las sesiones sean más fáciles de usar, no tienes que pensar tanto. De hecho, al almacenar valores en $_SESSIONSuper Global, todo lo que tiene que hacer es crear y nombrar las claves que desee y, a continuación, asignar los valores que desee según sea necesario. Veamos un ejemplo.

Resumen de sesiones vs cookies PHP

Con suerte, después de leer este tutorial, comprenderá mejor cómo funcionan las cookies y las sesiones en PHP. Las principales conclusiones son que las cookies se encuentran en el navegador de los usuarios, mientras que los archivos de sesión se encuentran en el sistema de archivos del servidor. Las sesiones todavía usan cookies, pero solo es para proporcionar un ID de sesión de PHP o una referencia al archivo de sesión que se encuentra en el servidor.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas