当前位置: 首页 > 知识库问答 >
问题:

如何在PHP中存储cookie以唯一标识用户投票而无需登录

颛孙高义
2023-03-14

上下文

我在我的网站上有一个辩论系统,用户可以点击他们想要投票的辩论选项,然后就会显示两个选项的辩论票数。 但是,用户需要登录他们的帐户,这样才能起作用,所以只是路过的用户是无法投票的(你可以在这里查看功能性)。 我希望改变这个代码,使用户可以投票辩论而不登录他们的帐户。 我知道大多数选项都不是完全可靠的,也是可以解决的,所以我决定使用cookie来存储信息,这些信息可以识别用户是否在没有登录的情况下对辩论进行了投票。

问题

由于我是使用cookie的新手,我想知道:实现cookie的最佳方法是什么,以便我可以将辩论投票插入数据库,并在未登录的用户两次点击同一辩论时对其进行检查? 我想我只需要一个唯一的号码,它将作为cookie存储在客户端,直到cookie被删除。 考虑到这一点,我认为可以根据用户IP地址创建一个随机数,如下所示:

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

我知道用户可以更改IP地址,但我认为只要在客户端存储有一个数字,这就无关紧要。 这是一个好的方法来获得一个唯一的号码,可以存储在客户端的一个cookie,还是我应该设置一个不同的唯一的号码,因为某种原因会更好地工作? 这样做安全吗? 里面似乎没有任何重要的私人用户信息。

问题的下一部分是如何修改数据库代码以容纳那些未登录的用户。 我的数据库表poll_votes当前的配置如下:

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;

如您所见,我的表中的一个列是IDusers,它引用了表users中的注册用户。 这意味着我必须通过添加另一列来更改表,该列将在用户对辩论投票时跟踪唯一的cookie ID,并且还将IDusers设置为NOT NULL,对吗? 我想在实现它之前检查一下它,以确保我没有误解Cookie在这种情况下是如何用来解决这个问题的。 如果有什么困惑就告诉我。 谢了。

共有1个答案

南宫凯康
2023-03-14

我看到了一些问题。 我们为音乐活动建立了几个投票系统,你通常会得到很多没有帐户的用户。

首先,IP地址不是一个好主意。

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

假设我在DigitalEconomyHub.com的共享办公室--有多个同事,我们都有相同的IP地址。 我会建议使用UUID--几乎是无穷无尽的唯一数字。 从另一个角度来说,我的同事会看到我投了什么票(不酷)。

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

其次,DB希望您始终拥有一个user对象。

idUsers INT(11) NOT NULL

随机访问者的用户对象? 会产生太多的垃圾记录。 让我们以不同的方式来做--idUsers变成一个可为空的字段,并添加一个varchar和索引的字段voter_uuid。

 类似资料:
  • 问题内容: 我正在为我的PHP / MySQL网站创建一个投票系统,我想确保一个用户只能投票一次。什么是这样做的好方法?到目前为止,我已经想到并半实现了以下内容: 使用IP和表决将单个表决存储在数据库中。这样会造成体积大,但可确保每个用户获得一票。 在用户端存储cookie,以检查他们是否投票。这是最简单的方法,但显然用户只能禁用cookie。 什么是最实用的方法?任何其他建议都值得欢迎。 问题答

  • 问题内容: 目前,当用户登录时,我创建了2个会话。 因此,那些需要登录的页面,我只是这样做: 有安全漏洞吗?我的意思是,很容易破解我的会话吗?人们如何修改会话?以及如何预防呢? 编辑: 刚刚找到链接,这些方法够好吗?请发表您的意见。我仍然没有得到最好的答案。 问题答案: 术语 用户: 访客。 客户端: 安装在特定计算机上的特定于Web的软件。 了解会议 为了了解如何使会话安全,您必须首先了解会话的

  • 我使用下一个endpoint来获取“https://graph.microsoft.com/v1.0/users/?$select=id,displayName,mail,userPrincipalName“根据文档:https://learn.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0没有关于用户资源类型的唯一

  • 用了nginx代理,本想用IP做标识,但是同一局域网下的所有设备,都是共用同一IP,请问可以获取到局域网ip或者通过哪些参数组合可以区分唯一性

  • 问题内容: TLDR;如何在基于事件的编程模型中标识套接字。 我刚刚开始使用node.js,过去我在C ++和PHP sockets()中完成了大部分编码工作,所以node.js对我来说是非常新的东西。 在c ++中,我们可以通过编写主套接字(例如服务器)来侦听新的连接和更改,然后相应地处理这些连接,从而完成识别套接字的工作。 问题答案: 如果您在寻找实际的套接字而不是socket.io,那么它们

  • 我想找到一种方法,使悬停属性在投票后保持活动状态,这是状态,并让Javascript或Firebase记住为该用户保持投票图标处于该状态。所以当一个用户投了几个名字,然后再回到页面时,他们会看到他们投了哪些名字,他们投的是什么。 我正在寻找如何实现这一目标的想法。 目前,在firebase中,我将用户的身份验证ID(uid)保存在他们投票的每个人的名字中,或者是1或者是-1表示支持或支持。我确信可

  • 一、简介 系统的投票功能提供了两种投票类型,第一个是单选投票.第二种是多选投票.网站编辑人员可以根据实际的需求,选择类型进行操作。 何处使用投票: 常用于首页、内容页、及专题页面。所有你想放投票的区域。 如何使用: 只需要根据投票所放位置不同,复制对应代码到模版里即可。 系统信息发布页 和 专题管理内置提供了投票选择功能,只需手动点选,即可添加投票。 针对不同位置CSS样式不同,系统提供了三种常用

  • 现在我们的系统更完善了,但是想要找到最受欢迎的帖子有点难。我们需要一个排名系统来给我们的帖子排个序。 我们可以建立一个基于 karma 的复杂排名系统,权值随着时间衰减,和许多其他因素(很多功能都在 Telescope 中实现了,他是 Microscope 的大哥)。但是对于我们的例子 app, 我们尽量保持简单,我们只按照帖子收到的投票数为它们排序。 让我们实现一个给用户为帖子投票的方法。 数据