我正在寻求了解某些网站使用的一般机制,以允许非注册用户或简单的客人为某事(例如评论、视频、图像..等)投票。他们如何跟踪?与此类网站一样,同一位客人不能从同一终端投票两次。他们存储他们的 IP 地址吗?或者他们保存计算机 ID/名称?
任何想法都非常感谢。
PS:(mywot.com)是此类网站的一个示例。
我正在寻求了解某些网站使用的一般机制,以允许非注册用户或简单的客人为某事(例如评论、视频、图像..等)投票。他们如何跟踪?与此类网站一样,同一位客人不能从同一终端投票两次。他们存储他们的 IP 地址吗?或者他们保存计算机 ID/名称?
任何想法都非常感谢。
PS:(mywot.com)是此类网站的一个示例。
他们使用 cookie 或会话来识别已经投票的计算机。如果你稍微了解 Javascript 或 PHP,我可以给你一些例子。
编辑:好的,这是一个例子:
<button value="VOTE" onClick="vote();">
<script>
var votes = 9654; //Some vote counter - only for test purposes - practically, this wouldn't work, the votes would have to be stored somewhere, this number is only stored in the browser and won't actually change for everyone, who sees the page!
function vote()
{
var cookies = document.cookie.split(";"); //Make an array from the string
var alreadyVoted = false;
for (var i = 0; i < cookies.length; i++) //Iterate through the array
{
temp = cookies[i].split("=");
if (temp[0] == "voted" && temp[1] == "true") //The cookie is there and it is "true", he voted already
alreadyVoted = true;
}
if (alreadyVoted)
{
alert("You can't vote twice, sorry.");
}
else
{
var date = new Date();
date.setTime(date.getTime()+(5*24*60*60*1000)); //Cookie will last for five days (*hours*mins*secs*milisecs)
var strDate = date.toGMTString(); //Convert to cookie-valid string
document.cookie = 'voted=true; expires=' + strDate + '; path=/'; //Creating the cookie
votes++; //Here would be probably some ajax function to increase the votes number
alert("Thanks for voting!\nVotes: "+votes);
}
}
</script>
希望这会有所帮助,但这只是一个非常简单的 cookie 演示代码,实际上不适用于投票!您将不得不使用一些 PHP 或类似的东西来实际存储投票值......
通常的技术是使用cookies。IP 地址是不够的,因为现在很多地方都使用 NAT(办公室、网吧、大多数带有 DSL 路由器的家庭)。
理想情况下,cookie 应该在后端处理,但也可以在浏览器中用 javascript 处理。
Cookie 确实是解决方案。这是一个可行的系统:
在数据库中有一个投票表,用于记住每个访客 ID 的投票。当访问者进入您的站点时,检查请求是否包含 visitor_id cookie。如果没有,则生成一个唯一的 visitor_id(使用 uuid 生成器),并在响应中放入一个 visitor_id cookie,生成的 id 作为值。这个cookie应该是持久的。
每次触发投票时(和/或每次生成投票链接),检查由他的 visitor_id cookie 标识的当前访问者是否已经通过投票表投票。投票完成后,将其存储在投票表中。
当然,没有什么能阻止任何访问者清除其 cookie,或使用其他浏览器或机器进行多次投票。但如果没有身份验证,这是您能做的最好的事情。