Cookies vs. sesiones


189

Empecé a usar PHP hace un par de meses. En aras de crear un sistema de inicio de sesión para mi sitio web, leí sobre las cookies y las sesiones y sus diferencias (las cookies se almacenan en el navegador del usuario y las sesiones en el servidor). En ese momento, prefería las cookies (¡¿y a quién no le gustan las cookies ?!) y solo dije: "¿a quién le importa? mi proyecto de graduación de bachiller. Sin embargo, después de hacer la mayor parte de mi aplicación, escuché que para el caso particular de almacenar la identificación del usuario, las sesiones son más apropiadas. Entonces comencé a pensar en qué diría si el jurado me pregunta por qué has usado cookies en lugar de sesiones. Solo tengo esa razón (que no necesito almacenar internamente información sobre el usuario).? o es más que eso?
¿Podría contarme acerca de las ventajas / desventajas de usar cookies para mantener la identificación del usuario?

¡Gracias por todos ustedes en StackOverflow!


2
Ambos métodos almacenan datos . Las cookies lo hacen en el lado del cliente, es decir, en el almacenamiento de los dispositivos de sus visitantes. Las sesiones son una "extensión" inteligente, ya que solo almacenan una ID única en el lado del cliente y todos los datos reales en el lado del servidor. Cuando reciben la identificación única de la cookie del cliente, saben qué datos cargar en el servidor. En la mayoría de los casos, las sesiones serán lo que necesita. Por cierto, puedes gestionar ambos con github.com/delight-im/PHP-Cookie de una manera más moderna.
grazna el

Por otro lado, el núcleo de WordPress abandonó el uso de sesiones hace varios años y ahora usa únicamente cookies . Interesante. Me pregunto si hicieron eso para facilitar la implementación en un conjunto de servidores con equilibrio de carga y / o para reducir los cierres de sesión aleatorios debido a la recolección de basura de la sesión.
Simon East

Respuestas:


230

El concepto es almacenar datos persistentes en las cargas de página para un visitante web. Las cookies lo almacenan directamente en el cliente. Las sesiones usan una cookie como una especie de clave, para asociarse con los datos almacenados en el lado del servidor.

Se prefiere usar sesiones porque los valores reales están ocultos para el cliente, y usted controla cuándo caducan los datos y dejan de ser válidos. Si todo se basara en cookies, un usuario (o hacker) podría manipular sus datos de cookies y luego reproducir solicitudes en su sitio.

Editar: no creo que haya ninguna ventaja al usar cookies, aparte de la simplicidad. Míralo de esta manera ... ¿Tiene el usuario alguna razón para conocer su número de identificación? Por lo general, diría que no, el usuario no necesita esta información. Dar información debe limitarse en función de la necesidad de saber. ¿Qué sucede si el usuario cambia su cookie para tener una ID diferente, cómo responderá su aplicación? Es un riesgo de seguridad.

Antes de las sesiones estaban de moda, básicamente tenía mi propia implementación. Almacené un valor de cookie único en el cliente y almacené mis datos persistentes en la base de datos junto con ese valor de cookie. Luego, en las solicitudes de la página, comparé esos valores y obtuve mis datos persistentes sin dejar que el cliente controlara lo que era.


29
@JiminyCricket No creo que sea cierto ... si es así, nadie usaría variables de sesión para almacenar el usuario actualmente conectado, y todos lo hacen. Sería un gran riesgo de seguridad. Bastante seguro de que, por lo general, el ID de la sesión se almacena como una cookie en la máquina del cliente, y luego se compara con el lado del servidor con los datos de la sesión. El servidor generalmente no controla las sesiones a través de la dirección IP, sino a través de un valor de cookie.
John M.

1
Recientemente comencé a usar solo cookies nuevamente, simplemente porque las sesiones hacen que las páginas no se carguen si hay otra que se está ejecutando actualmente desde la misma sesión, a menos que prescriba cada página session_write_close();cuando la necesite. Rodar su propia identificación única y combinarlas con cookies simples no fue tan difícil, y mantiene todas las páginas agradables y rápidas.
Brian Leishman

¿Crees que debería usar sesiones para la autenticación? ¿Tiene algún riesgo de seguridad? ¿Qué tal un hacker intenta cambiar su ID de sesión, cómo respondería el servidor (supongamos que la ID de sesión adivinada es válida)?
O-BL

Use sesión y luego 2FA como sesión puede ser secuestrada.
Zakir Sajib

120

Ideas básicas para distinguir entre esos dos.

Sesión:

  1. IDU se almacena en el servidor (es decir, del lado del servidor)
  2. Más seguro (debido a 1)
  3. La caducidad no se puede establecer, las variables de sesión caducarán cuando los usuarios cierren el navegador. (hoy en día se almacena durante 24 minutos por defecto en php)

Galletas:

  1. IDU se almacena en el navegador web (es decir, del lado del cliente)
  2. No es muy seguro, ya que los hackers pueden alcanzar y obtener su información (debido a 1)
  3. Se puede configurar la caducidad (consulte setcookies () para obtener más información)

Se prefiere la sesión cuando necesita almacenar información / valores a corto plazo, como variables para calcular, medir, consultar, etc.

Se prefieren las cookies cuando necesita almacenar información / valores a largo plazo, como la cuenta del usuario (de modo que incluso cuando apagan la computadora durante 2 días, su cuenta seguirá conectada). No puedo pensar en muchos ejemplos de cookies, ya que no se adopta en la mayoría de las situaciones.


66
Tenga en cuenta: esta NO es una buena respuesta. Comienza bastante bien pero confunde las cosas y termina con desinformación. Esta no es una explicación de sesión frente a cookies. Es una explicación de sesión versus sesión + cookie de sesión. Las cookies por sí solas no son preferidas por las razones indicadas. Las cookies de sesión + sesión son preferidas por las razones indicadas.
markus

Otro error es que usted tiene influencia en la vida útil de la sesión a través de la configuración de PHP.
markus

1
Sessions todavía establece una cookie en el navegador del usuario, por lo que esta explicación del lado del servidor-cliente no es precisa
Zalaboza

El vencimiento de las sesiones puede ser configurado por cualquier aplicación fácilmente. El tercer punto está mal. Además, olvidó la cantidad de datos que se pueden almacenar en cookie vs sesión. Ese es un punto más significativo
saran3h

1
¿Qué significa IDU?
Simon East

45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

Esta es la principal diferencia en su elección,

Si desea que la identificación se recuerde durante mucho tiempo, debe usar cookies; de lo contrario, si solo desea que el sitio web reconozca al usuario para esta visita solo entonces las sesiones son el camino a seguir.

Las sesiones se almacenan en un archivo que generará su servidor php. Para recordar qué archivo es para qué usuario, php también establecerá una cookie en el navegador del usuario que contiene esta identificación de archivo de sesión, por lo que en su próxima visita php leerá este archivo y volverá a cargar la sesión.

Ahora, por defecto, php borra las sesiones en cada intervalo, y también la convención de nomenclatura de la sesión hace que caduque automáticamente. Además, los navegadores no conservarán la cookie que contiene la identificación de la sesión una vez que se cierra el navegador o se borra el historial.

Es importante tener en cuenta que hoy en día los navegadores también admiten otro tipo de motores de almacenamiento como LocalStorage, SessionStorage y otros motores webdb que el código javascript puede usar para guardar datos en su computadora para recordarlo. Si abre la consola de JavaScript dentro de Facebook, por ejemplo, y escribe "localStorage", verá todas las variables que usa Facebook para recordarlo sin cookies.


16
En realidad, de forma predeterminada, una sesión dura hasta que el usuario cierra su navegador, PERO esto se puede cambiar en el archivo php.ini cambiando el 0 en session.cookie_lifetime = 0 para que sea el número de segundos que desea que dure la sesión, o por usando session_set_cookie_params ().
DOK

1
Más información útil, tal pregunta que obtiene muchas respuestas ... genial, gracias de nuevo DOK!
Nadjib Mami

1
También tenga en cuenta el punto único de falla que pueden crear los archivos de sesión. Cuando incluso el ataque de estilo DOS más pequeño ocurre a través de proxy, conmutador de ip o zombies, se crea un archivo de sesión en el disco duro de su servidor o ssd. Si no puede mantenerse al día con las escrituras de lectura, su sitio se desactivará.
Shawn E Carter

¿Alguien puede afirmar: "LAS SESIONES TERMINAN CUANDO EL USUARIO CIERRA SU NAVEGADOR" 1. ¿Qué pasa si el usuario navega por una página? Luego regresa sin cerrar el navegador. 2. ¿Qué pasa si tienen varias ventanas / pestañas del navegador abiertas que apuntan al mismo sitio? Algunas aplicaciones web en el trabajo se confunden en esta situación, pero no sé qué tipo de cookies usan.
jcansell

1
@jcansell bueno, una cookie no se confundirá con múltiples pestañas o navegando, en tal caso, probablemente estas aplicaciones web usaron almacenamiento local / almacenamiento de sesión para guardar datos usando JavaScript
Zalaboza

20

cuando guarda el #ID como la cookie para reconocer a los usuarios registrados, en realidad está mostrando datos a los usuarios que no están relacionados con ellos. Además, si un tercero intenta establecer identificaciones aleatorias como datos de cookies en su navegador, podrá convencer al servidor de que es un usuario mientras que en realidad no lo es. Eso es falta de seguridad.

Ha utilizado cookies y, como ha dicho, ya ha completado la mayor parte del proyecto. Además, la cookie tiene el privilegio de permanecer durante mucho tiempo, mientras que las sesiones finalizan más rápidamente. Por lo tanto, las sesiones no son adecuadas en este caso. En realidad, muchos sitios web y servicios famosos y populares usan cookies y puede permanecer conectado durante mucho tiempo. Pero, ¿cómo puede usar su método para crear un proceso de inicio de sesión más seguro?

esta es la idea: puede ayudar a utilizar las cookies: si usa claves aleatorias en lugar de ID para reconocer a los usuarios registrados, primero, no filtra sus datos primarios a usuarios aleatorios, y segundo, si considera el azar clave lo suficientemente grande, será más difícil para cualquiera adivinar una clave o crear una aleatoria. por ejemplo, puede guardar una clave de 40 longitudes como esta en el navegador del Usuario: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn" y será menos probable que alguien cree la clave exacta y finja ser otra persona.


1
Buena explicación Utilizo GUID en token para reconocer usuarios individuales.
Karthik

18

Respuesta corta

Reglas ordenadas por prioridad:

  • Regla 1. Nunca confíes en la entrada del usuario: las cookies no son seguras. Use sesiones para datos confidenciales.
  • Regla 2. Si los datos persistentes deben permanecer cuando el usuario cierra el navegador, use cookies.
  • Regla 3. Si los datos persistentes no tienen que permanecer cuando el usuario cierra el navegador, use sesiones.
  • Regla 4. ¡Lee la respuesta detallada!

Fuente: https://www.lucidar.me/en/web-dev/sessions-or-cookies/


Respuesta detallada

Galletas

  • Las cookies se almacenan en el lado del cliente (en el navegador del visitante).
  • Las cookies no son seguras: es bastante fácil leer y escribir el contenido de las cookies.
  • Al usar cookies, debe notificar a los visitantes de acuerdo con las leyes europeas (GDPR).
  • Se puede configurar la caducidad, pero el usuario o el navegador pueden cambiarla.
  • Los usuarios (o el navegador) pueden (configurar) rechazar el uso de cookies.

Sesiones

  • Las sesiones se almacenan en el lado del servidor.
  • Las sesiones usan cookies (ver más abajo).
  • Las sesiones son más seguras que las cookies, pero no invulnables.
  • La caducidad se establece en la configuración del servidor (php.ini, por ejemplo).
  • El tiempo de caducidad predeterminado es de 24 minutos o cuando el navegador está cerrado.
  • La caducidad se restablece cuando el usuario actualiza o carga una nueva página.
  • Los usuarios (o navegador) pueden (configurar) rechazar el uso de cookies, por lo tanto, sesiones.
  • Legalmente, también debe notificar a los visitantes la cookie, pero la falta de precedentes aún no está clara.

La elección adecuada

¡Las sesiones usan una galleta! Los datos de la sesión se almacenan en el lado del servidor, pero un UID se almacena en el lado del cliente en una cookie. Permite que el servidor haga coincidir un usuario determinado con los datos de sesión correctos. UID está protegido y es difícil de hackear, pero no invulnarable. Para acciones delicadas (cambio de correo electrónico o restablecimiento de contraseña), no confíe en las sesiones ni en las cookies: solicite la contraseña del usuario para confirmar la acción.

Los datos confidenciales nunca deben almacenarse en cookies (correos electrónicos, contraseñas cifradas, datos personales ...). Tenga en cuenta que los datos se almacenan en una computadora extranjera, y si la computadora no es privada (en el aula o pública), otra persona puede leer el contenido de las cookies.

Los datos de Remember-me deben almacenarse en cookies; de lo contrario, los datos se perderán cuando el usuario cierre el navegador. Sin embargo, no guarde la contraseña o los datos personales del usuario en la cookie 'recordarme'. Almacene los datos del usuario en la base de datos y vincule estos datos con un par cifrado de ID / clave almacenada en una cookie.

Después de considerar las recomendaciones anteriores, la siguiente pregunta es finalmente lo que le ayuda a elegir entre cookies y sesiones:

¿Deben permanecer los datos persistentes cuando el usuario cierra el navegador?

  • Si la respuesta es , use cookies .
  • Si la respuesta es no , use sesiones .

13

En realidad, la sesión y las cookies no siempre son cosas separadas. A menudo, pero no siempre, la sesión usa cookies.

Hay algunas buenas respuestas a su pregunta en estas otras preguntas aquí. Dado que su pregunta se refiere específicamente a guardar la IDU (o ID) del usuario, no creo que sea un duplicado de esas otras preguntas, pero sus respuestas deberían ayudarlo.

cookies vs sesión

¿Caché VS sesión VS cookies?

¿Cuál es la diferencia entre una sesión y una cookie?


10

Yo personalmente uso cookies y sesión.

Las cookies solo se usan cuando el usuario hace clic en la casilla "recordarme" . y también las cookies se cifran y los datos solo se descifran en el servidor. Si alguien intenta editar las cookies, nuestro desencriptador puede detectarlo y rechazar la solicitud.

He visto tantos sitios donde la información de inicio de sesión se almacena en cookies , cualquiera puede simplemente cambiar la identificación del usuario y el nombre de usuario en las cookies para acceder a cualquier cuenta.

Gracias,


2

Sesión y Cookie no son lo mismo.

Se utiliza una sesión para almacenar la información de las páginas web. Normalmente las páginas web no tienen ningún recuerdo para almacenar esta información. Pero usando podemos guardar la información necesaria.

Pero Cookie está acostumbrado a identificar a los usuarios. Usando cookies podemos almacenar los datos. Es una pequeña parte de los datos que se almacenará en el navegador web del usuario. Por lo tanto, cada vez que el usuario navegue la próxima vez, el navegador devolverá la información de datos de cookies al servidor para obtener las actividades anteriores.

Créditos: sesión y cookie


¿Qué pasa si el usuario deshabilita las cookies? ¿Cómo identifican las cookies al usuario?
SohailRajput

1

Las sesiones le permiten almacenar información individual al igual que con las cookies, pero los datos se almacenan en el servidor en lugar del cliente.


0

Como otros dijeron, las sesiones son inteligentes y tienen más ventaja de ocultar la información al cliente.

Pero Cookie aún tiene al menos una ventaja : puede acceder a sus Cookies desde Javascript (por ejemplo, ngCookies ). Con la sesión PHP no puede acceder a ella desde ningún lugar fuera del script PHP.


1
Puede ... No directamente, por supuesto, sin embargo, puede acceder a través de alguna solicitud de ajax al script que devuelve datos de sesión. Pero no estoy seguro de que deberías.
l00k

0

Seleccionaré Sesión, en primer lugar, la sesión es más segura que las cookies, las cookies son los datos del sitio del cliente y la sesión son los datos del sitio del servidor. Las cookies se utilizan para identificar a un usuario, ya que son pequeñas piezas de código que están incrustadas en mi servidor con el navegador de la computadora del usuario. Por otro lado, Session lo ayuda a asegurar su identidad porque el servidor web no sabe quién es usted porque la dirección HTTP cambia el estado 192.168.0.1 a 765487cf34ert8ded ... o algo más numera con la ayuda de los métodos GET y POST. La sesión almacena datos del usuario en una sesión de ID única que incluso la ID de usuario no puede coincidir entre sí. La sesión almacena información de un solo usuario en todas las páginas de una aplicación. Las cookies caducan se configuran con la ayuda de setcookies (), mientras que la caducidad de la sesión no se configura, caduca cuando el usuario apaga los navegadores.


0

Una sesión es un grupo de información en el servidor que está asociado con la información de la cookie. Si está utilizando PHP, puede verificar la sesión. guardar _ ubicación de ruta y en realidad "ver sesiones". Una cookie es un fragmento de datos enviados y devueltos por los clientes. Las cookies se utilizan a menudo para facilitar las sesiones, ya que le dice al servidor qué cliente manejó cada sesión. Hay otras formas de hacer esto (magia de cadena de consulta, etc.), pero es probable que las cookies sean las más comunes para esto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.