¿Cuál es la diferencia entre crear cookies en el servidor y en el cliente? ¿Se denominan cookies del lado del servidor y cookies del lado del cliente? ¿Existe alguna forma de crear cookies que solo se puedan leer en el servidor o en el cliente?
¿Cuál es la diferencia entre crear cookies en el servidor y en el cliente? ¿Se denominan cookies del lado del servidor y cookies del lado del cliente? ¿Existe alguna forma de crear cookies que solo se puedan leer en el servidor o en el cliente?
Respuestas:
Las cookies son pares clave / valor que utilizan los sitios web para almacenar información de estado en el navegador. Supongamos que tiene un sitio web (ejemplo.com), cuando el navegador solicita una página web, el sitio web puede enviar cookies para almacenar información en el navegador.
Ejemplo de solicitud de navegador:
GET /index.html HTTP/1.1
Host: www.example.com
Respuesta de ejemplo del servidor:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest of the response
Aquí se almacenan en el navegador dos cookies foo = 10 y bar = 20. El segundo caducará el 30 de septiembre. En cada solicitud posterior, el navegador enviará las cookies de vuelta al servidor.
GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
Las cookies del lado del servidor se conocen como "sesiones". En este caso, el sitio web almacena una única cookie en el navegador que contiene un identificador de sesión único. La información de estado (foo = 10 y bar = 20 arriba) se almacena en el servidor y el identificador de sesión se usa para hacer coincidir la solicitud con los datos almacenados en el servidor.
Puede utilizar tanto sesiones como cookies para almacenar: datos de autenticación, preferencias del usuario, el contenido de un gráfico en un sitio web de comercio electrónico, etc ...
A continuación, pros y contras de las soluciones. Estos son los primeros que me vienen a la mente, seguro que hay otros.
Ventajas de las cookies:
Contras de las cookies:
Ventajas de la sesión:
Contras de la sesión:
secure
:?
¿Probablemente te refieres a la diferencia entre las cookies Http Only y su contraparte?
No se puede acceder a las cookies de Http Only (leer o escribir) en JavaScript del lado del cliente, solo del lado del servidor. Si no se establece el indicador Http Only, o la cookie se crea en JavaScript (del lado del cliente), la cookie se puede leer y escribir en JavaScript (del lado del cliente) y también en el lado del servidor.
Todas las cookies son cliente y servidor
No hay diferencia. Una cookie normal se puede configurar del lado del servidor o del lado del cliente. La cookie 'clásica' se enviará de vuelta con cada solicitud. Una cookie establecida por el servidor se enviará al cliente en una respuesta. El servidor solo envía la cookie cuando se establece o cambia explícitamente, mientras que el cliente envía la cookie en cada solicitud.
Pero esencialmente es la misma galleta.
Pero el comportamiento puede cambiar
Una cookie es básicamente un name=value
par, pero después del valor puede haber un grupo de atributos separados por punto y coma que afectan el comportamiento de la cookie si así lo implementa el cliente (o servidor). Esos atributos pueden referirse a la duración, el contexto y varias configuraciones de seguridad.
Solo HTTP (no solo para servidor)
Un servidor puede establecer uno de esos atributos para indicar que es una cookie solo HTTP. Esto significa que la cookie todavía se envía de un lado a otro, pero no estará disponible en JavaScript. Sin embargo, tenga en cuenta que la galleta todavía está allí. Es solo una protección incorporada en el navegador, pero si alguien usa un navegador ridículamente antiguo como IE5, o algún cliente personalizado, ¡puede leer la cookie!
Así que parece que existen 'cookies de servidor', pero en realidad no las hay. Estas cookies todavía se envían al cliente. En el cliente no hay forma de evitar que se envíe una cookie al servidor.
Alternativas para lograr la 'unicidad'
Si desea almacenar un valor solo en el servidor, o solo en el cliente, necesitará algún otro tipo de almacenamiento, como un archivo o una base de datos en el servidor, o almacenamiento local en el cliente.
document.cookie="foo=bar"
seguido de, fetch("/foobar", {credentials: 'include'} )
no se envía ninguna cookie que contenga foo=bar
. Probé ese código directamente en este sitio usando DevTools y la consola.
Sí, puede crear cookies que solo se pueden leer en el lado del servidor. Se denominan cookies "Solo HTTP", como ya se explicó en otras respuestas.
No, no hay forma (que yo sepa) de crear "cookies" que solo se puedan leer en el lado del cliente. Las cookies están destinadas a facilitar la comunicación cliente-servidor.
PERO, si desea algo COMO "cookies solo para clientes", hay una respuesta simple: use "Almacenamiento local".
El almacenamiento local es sintácticamente más sencillo de usar que las cookies. Puede encontrar un buen resumen simple de cookies frente al almacenamiento local en:
Un punto: puede usar cookies creadas en JavaScript para almacenar cosas relacionadas con la GUI que solo necesita en el lado del cliente. PERO la cookie se envía al servidor para CADA solicitud realizada, se convierte en parte de los encabezados de solicitud http, lo que hace que la solicitud contenga más datos y, por lo tanto, sea más lenta de enviar.
Si su página tiene 50 recursos como imágenes, archivos css y scripts, la cookie se envía (normalmente) con cada solicitud. Más sobre esto en ¿Cada solicitud web envía cookies al navegador?
El almacenamiento local no tiene esas desventajas relacionadas con la transferencia de datos, no envía datos. Eso es genial.