上下文
我在我的网站上有一个辩论系统,用户可以点击他们想要投票的辩论选项,然后就会显示两个选项的辩论票数。 但是,用户需要登录他们的帐户,这样才能起作用,所以只是路过的用户是无法投票的(你可以在这里查看功能性)。 我希望改变这个代码,使用户可以投票辩论而不登录他们的帐户。 我知道大多数选项都不是完全可靠的,也是可以解决的,所以我决定使用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在这种情况下是如何用来解决这个问题的。 如果有什么困惑就告诉我。 谢了。