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!

Nadjib Mami
fuente
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.

Fosco
fuente
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.

Reyske
fuente
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.

Zalaboza
fuente
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.

Makan Tayebi
fuente
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 .
Fifi
fuente
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,

Muhammad Sanaullah
fuente
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

usuario3824494
fuente
¿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.

fuddin
fuente
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.

Kamalakannan J
fuente
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.

Wasiq Mahmood WM
fuente
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.

Megersa
fuente