Sesión PHP y cookies PHP con ejemplo

⚡ Resumen inteligente

En PHP, tanto las cookies como las sesiones conservan el estado a través del protocolo HTTP sin estado, pero almacenan los datos de forma diferente. Este tutorial explica cómo las cookies guardan pequeños archivos en el cliente, cómo las sesiones conservan los datos en el servidor y cómo crear, leer y destruir cada una con código funcional.

  • 🍪 Qué son las cookies: Una cookie es un archivo pequeño, de hasta 4 KB, que el servidor almacena en el cliente y que se devuelve con cada solicitud posterior.
  • 🗄️ ¿Qué son las sesiones? Una sesión almacena datos en el servidor bajo un ID único, que se guarda en el array $_SESSION y al que se hace referencia mediante una cookie de sesión.
  • 🆚 Diferencia clave: Las cookies se almacenan en el cliente y son adecuadas para datos pequeños y no confidenciales; las sesiones se almacenan en el servidor y contienen datos más grandes o privados.
  • 🛠️ Creación de cookies: La función setcookie() establece un nombre, un valor y, opcionalmente, indicadores de caducidad, ruta, dominio, seguridad y httponly antes de cualquier salida HTML.
  • 📝 Creación de sesiones: session_start() inicia una sesión, después de la cual se leen y escriben valores a través del array superglobal $_SESSION.
  • 🗑️ Limpiar: Caduque una cookie estableciendo una hora anterior; finalice una sesión con session_destroy() o borre un valor con unset().
  • 🤖 Asistencia de IA: Las herramientas de IA pueden implementar un manejo seguro de sesiones y detectar vulnerabilidades en las cookies o las sesiones en el código PHP existente.

Cookies y sesiones de PHP

¿Qué es una cookie?

Una cookie es un pequeño archivo con un tamaño máximo de 4 KB que el servidor web almacena en el ordenador del cliente.

Una vez que se ha configurado una cookie, todas las solicitudes de página siguientes devuelven el nombre y el valor de la cookie.

Una cookie solo puede leerse desde el dominio desde el que se emitió. Por ejemplo, una cookie establecida utilizando el dominio www.guru99.com no puede leerse desde el dominio carrera.guru99.com.

La mayoría de los sitios web en Internet muestran elementos de otros dominios como publicidad. Los dominios que sirven estos elementos también pueden establecer sus propias cookies. Se conocen como cookies de terceros.

Una cookie creada por un usuario sólo puede ser visible para él. Otros usuarios no pueden ver su valor.

La mayoría de los navegadores web tienen opciones para deshabilitar las cookies, las cookies de terceros o ambas.

Si este es el caso, entonces PHP responde pasando el token de la cookie en el URL.

El diagrama que se muestra a continuación ilustra cómo funcionan las cookies.

¿Qué es la galleta?

Aquí,

1) Un usuario solicita una página que almacena cookies.

2) El servidor instala la cookie en el ordenador del usuario.

3) Otras solicitudes de página del usuario devolverán el nombre y el valor de la cookie.

¿Por qué y cuándo utilizar Cookies?

  • HTTP es un protocolo sin estado; las cookies nos permiten tracLas cookies registran el estado de la aplicación mediante pequeños archivos almacenados en el ordenador del usuario. La ruta donde se almacenan depende del navegador. Internet Explorer suele guardarlas en la carpeta Archivos temporales de Internet.
  • Personalización de la experiencia del usuario: esto se logra permitiendo a los usuarios seleccionar sus preferencias. Las solicitudes de página posteriores se personalizan según las preferencias establecidas en las cookies.
  • Tracking las páginas visitadas por un usuario

Creando cookies

Veamos ahora la sintaxis básica que se utiliza para crear una cookie.

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

?>

AQUÍ,

  • “setcookie” es la Función PHP utilizado para crear la cookie.
  • “cookie_name” es el nombre de la cookie que el servidor utilizará para recuperar su valor de la variable de matriz $_COOKIE. Es obligatorio.
  • “cookie_value” es el valor de la cookie y es obligatorio.
  • “[expiry_time]” es opcional; se puede usar para establecer el tiempo de caducidad de la cookie, por ejemplo, 1 hora. El tiempo se establece usando la función time() de PHP más o menos un número de segundos mayor que 0, es decir, time() + 3600 para 1 hora.
  • “[ruta_cookie]” es opcional; se puede utilizar para configurar la ruta de las cookies en el servidor. La barra diagonal “/” significa que la cookie estará disponible en todo el dominio. Los subdirectorios limitan el acceso de cookies al subdominio.
  • “[dominio]” es opcional; se puede utilizar para definir la jerarquía de acceso a las cookies, es decir www.cookiedomain.com significa todo el dominio mientras www.sub.cookiedomain.com limita el acceso a las cookies a www.sub.cookiedomain.com y sus subdominios.
  • “[secure]” es opcional; por defecto es falso. Se utiliza para determinar si la cookie se envía mediante HTTPS si se establece en verdadero, o mediante HTTP si se establece en falso.
  • “[httponly]” es opcional. Si se establece en verdadero, entonces los lenguajes de scripting del lado del cliente como JavaScript No se puede acceder a la cookie.

Nota: La función setcookies de PHP debe ejecutarse antes de la etiqueta de apertura HTML.

Veamos ahora un ejemplo que utiliza cookies.

Crearemos un programa básico que nos permita almacenar el nombre de usuario en una cookie que caducará a los sesenta segundos.

El siguiente código muestra la implementación del ejemplo anterior "cookies.php".

<?php
setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds
echo 'the cookie has been set for 60 seconds';
?>

Salida:

the cookie has been set for 60 seconds

Recuperando el valor de la cookie

Crea otro archivo llamado “cookies_read.php” con el siguiente código.

<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>

Salida:

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )

Nota: $_COOKIE es una variable superglobal integrada de PHP. Contiene los nombres y valores de todas las cookies establecidas.

El número de cookies y su tamaño están limitados por el navegador, normalmente en torno a 50 cookies por dominio y 4 KB por cookie.

Probando nuestra aplicación. Supongamos que has guardado tus archivos PHP en una carpeta llamada phptuts.

  • Paso 1: abre tu navegador web e ingresa el URL http://localhost/phptuts/cookies_read.php

Recuperando el valor de la cookie

Nota: Solo se ha mostrado una matriz vacía

  • Paso 2 – navegue hasta el URL http://localhost/phptuts/cookies.php

Recuperando el valor de la cookie

  • Paso 3: vuelva a la primera pestaña y haga clic en el botón de actualizar.

Recuperando el valor de la cookie

Espera un minuto y vuelve a hacer clic en el botón de actualizar. ¿Qué resultados obtuviste?

Eliminar las cookies

  • Si desea destruir una cookie antes de su tiempo de vencimiento, entonces establezca el tiempo de vencimiento en un tiempo que ya haya pasado.
  • Crea un nuevo archivo llamado cookie_destroy.php con el siguiente código.
<?php

setcookie("user_name", "Guru99", time() - 360,'/');

?>
  • Repita los pasos 1 a 3 de la sección anterior sobre cómo recuperar los valores de las cookies.
  • Abra el panel de URL http://localhost/phptuts/cookie_destroy.php
  • Cambie a la URL http://localhost/phptuts/cookies_read.php¿Qué resultados muestra?

¿Qué es una sesión?

  • Una sesión es una variable global almacenada en el servidor.
  • A cada sesión se le asigna una identificación única que se utiliza para recuperar los valores almacenados.
  • Cada vez que se crea una sesión, se almacena una cookie que contiene el ID de sesión único en el ordenador del usuario y se devuelve con cada solicitud al servidor. Si el navegador del cliente no admite cookies, el ID de sesión único de PHP se muestra en el URL.
  • Las sesiones tienen la capacidad de almacenar datos relativamente grandes en comparación con las cookies.
  • Los valores de la sesión se eliminan automáticamente cuando se cierra el navegador. Si desea almacenar los valores de forma permanente, debe almacenarlos en la base de datos.
  • Al igual que la variable de matriz $_COOKIE, las variables de sesión se almacenan en la variable de matriz $_SESSION. Al igual que las cookies, la sesión debe iniciarse antes que cualquier etiqueta HTML.

¿Por qué y cuándo utilizar Sessions?

  • Desea almacenar información importante, como el ID de usuario, de forma más segura en el servidor, donde los usuarios malintencionados no puedan manipularla.
  • Quiere pasar valores de una página a otra.
  • Buscas una alternativa a las cookies en navegadores que no las admiten.
  • Desea almacenar variables globales de una manera más eficiente y segura en comparación con pasarlas como argumentos. URL.
  • Estás desarrollandoping una aplicación como una tiendaping carrito que debe almacenar temporalmente información con una capacidad superior a 4 KB.

Crear una sesión

Para crear una sesión, primero debe llamar a la función session_start de PHP y luego almacenar sus valores en la variable de matriz $_SESSION.

Supongamos que queremos saber cuántas veces se ha cargado una página. Podemos usar una sesión para ello.

El siguiente código muestra cómo crear y recuperar valores de las sesiones.

<?php

session_start(); // start the session

if(isset($_SESSION['page_count']))
{
$_SESSION['page_count'] += 1;
}
else
{
$_SESSION['page_count'] = 1;
}
echo 'You are visitor number ' . $_SESSION['page_count'];

?>

Salida:

You are visitor number 1

Destruyendo variables de sesión

La función session_destroy() se utiliza para destruir toda la sesión de PHP.

Si desea eliminar solo un elemento de sesión, utilice la función unset().

El siguiente código ilustra cómo utilizar ambos métodos.

<?php

session_destroy(); // destroy entire session

?>
<?php

unset($_SESSION['product']); // destroy product session item

?>

session_destroy elimina todos los datos de la sesión, incluidas las cookies asociadas a la misma.

La opción `unset` solo libera las variables de sesión individuales. Los demás datos permanecen intactos.

Preguntas Frecuentes

Las cookies almacenan datos en un pequeño archivo en el navegador del usuario y se envían con cada solicitud. Las sesiones almacenan datos en el servidor y solo envían una cookie con el ID de sesión. Las sesiones son más seguras para datos confidenciales o de gran volumen.

Por defecto, PHP guarda los datos de sesión como archivos en la ruta definida por session.save_path en php.ini, que suele ser el directorio temporal del sistema. Los sitios con mucho tráfico suelen cambiar esta configuración a una base de datos, Redis o Memcached.

Establezca la bandera HttpOnly para que JavaEl script no puede leer la cookie, la bandera Secure garantiza que solo se transmita a través de HTTPS, y el atributo SameSite limita el envío entre sitios. Para las sesiones, se regenera el ID después de iniciar sesión.

Sí. La IA puede generar un flujo de inicio de sesión que regenere el ID de sesión, establezca indicadores de cookies seguras, almacene datos mínimos en el servidor y aplique tiempos de espera. RevRevise el resultado en función de sus requisitos de seguridad.

Sí. La IA puede detectar la falta de indicadores HttpOnly o Secure, riesgos de fijación de sesión, almacenamiento de datos confidenciales en cookies y ausencia de regeneración de ID después del inicio de sesión, y luego sugerir el código corregido.

Resumir este post con: