Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Cómo almacenar cookies en PHP para identificar de forma única a los usuarios que votan sin iniciar sesión

Contexto

Tengo un sistema de debate en mi sitio web donde los usuarios pueden hacer clic en la opción del debate por el que quieren votar, que luego revela el recuento de los votos del debate en cualquiera de las opciones. Sin embargo, los usuarios deben iniciar sesión en su cuenta para que esto funcione, por lo que los usuarios que están de paso no pueden votar (puede consultar la funcionalidad aquí ). Estoy buscando modificar este código para que los usuarios puedan votar en los debates sin iniciar sesión en su cuenta. Sabiendo que la mayoría de las opciones no son completamente confiables y se pueden solucionar, decidí usar cookies para almacenar información que identificaría si los usuarios votaron en el debate o no sin iniciar sesión.

Pregunta

Como soy nuevo en el trabajo con cookies, me preguntaba: ¿Cuál es la mejor manera de implementar cookies para poder insertar los votos del debate en mi base de datos y compararlos cuando el usuario que no ha iniciado sesión hace clic en el mismo debate dos veces? ? Pensé que solo necesitaría un número único que se almacenaría como una cookie en el lado del cliente hasta que se eliminen las cookies. Con esto en mente, pensé que podría crear un número aleatorio basado en la dirección IP del usuario, así:

 setcookie('temp_id', md5($_SERVER['REMOTE_ADDR']);

Sé que los usuarios pueden cambiar la dirección IP, pero no pensé que esto importaría siempre que haya un número almacenado en el lado del cliente. ¿Es esta una buena manera de obtener un número único que se puede almacenar como una cookie en el lado del cliente, o debo configurar un número único diferente que funcione mejor por alguna razón? ¿Es esto algo seguro de hacer? No parece haber ninguna información privada importante del usuario allí.

La siguiente parte del problema es cómo alteraría el código de mi base de datos para acomodar a aquellos que no han iniciado sesión. Mi tabla de base de datos poll_votes está configurada actualmente de la siguiente manera:

 CREATE TABLE poll_votes ( vote_id INT(11) AUTO_INCREMENT PRIMARY KEY NOT NULL, yes VARCHAR(50) NOT NULL, no VARCHAR(50) NOT NULL, poll_id INT(11) NOT NULL, idUsers INT(11) NOT NULL, article_id INT(11) UNSIGNED, seen TINYTEXT NOT NULL, FOREIGN KEY (article_id) REFERENCES articles (article_id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (poll_id) REFERENCES polls (poll_id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (idUsers) REFERENCES users (idUsers) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB;

Como puede ver, una de las columnas de mi tabla es idUsers , que hace referencia a los usuarios registrados en la tabla users . Esto significa que tendré que modificar la tabla agregando otra columna que mantendría un registro de la ID de cookie única cuando el usuario vota en un debate y también establecería idUsers en NULL , ¿correcto? Quería verificar esto antes de implementarlo para asegurarme de que no estaba malinterpretando cómo se podrían usar las cookies en esta situación para resolver este problema. Avísame si hay alguna confusión. Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Veo un par de problemas. Creamos un par de sistemas de votación para eventos musicales y, por lo general, obtienes muchos usuarios sin cuentas.

En primer lugar, la dirección IP no es una buena idea.

 setcookie('temp_id', md5($_SERVER['REMOTE_ADDR']);

Digamos que estoy en una oficina compartida de DigitalEconomyHub.com: hay varios compañeros de trabajo y todos tenemos la misma dirección IP. Sugeriría usar UUID, un número único casi infinito. De otra manera, mis compañeros de trabajo verían lo que voté (no es genial).

 setcookie('voter_uuid', uniqid($_SERVER['REMOTE_ADDR'], true));

En segundo lugar, la base de datos espera que tenga un objeto de usuario todo el tiempo.

 idUsers INT(11) NOT NULL

¿Objetos de usuario para el visitante aleatorio? Generará demasiados registros basura. Hagámoslo de manera diferente: idUsers se convierte en un campo anulable y agregamos un campo voter_uuid que es varchar e indexado.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda