2012-11-16 159 views
0

我正在开发一个投票网站,我只希望选民投票一次。这是一个3阶段的过程。第一页是选择你想为第二页投票的人确认该人(隐藏的单选按钮提交投票),第三页是感谢页面。我想检查第一页和第二页上的cookie并在第三页上写入cookie。我希望cookie在第一次导航到网站后的两天内过期。我想将已投票的人重定向到cookie.htm(与其他所有文件夹位于同一文件夹中)您将如何执行此操作?Javascript只投票一次Cookies

+3

很好。我想要一杯啤酒和一个汉堡包。问题是什么? –

+6

我建议你使用服务器端执行此任务(基于IP地址)。设置和阅读不是很可靠,因为用户可以清除cookie并重新投票。 –

+0

这将被用作我在学校举行的歌唱比赛的iPhone调查。投票时间为五分钟。我只是想设法阻止人们再次投票。我无法做IP,因为所有的iPhone/iPod Touch都会连接到相同的热点(约500台设备)。 – rn10950

回答

0

我认为它基于来自某个已知网站的电子邮件地址,并要求有人确认电子邮件地址可能是您最好的选择。

0

我认为你最好的选择是有一个注册过程并强制用户登录投票。正如评论中提到的,你需要一些服务器端的魔法。

+0

问题是,它将被用于一次性使用,所以真的没有使用/注册/登录的时间 – rn10950

+0

那么你不能保证用户只会投一次。如果我清除了我的cookies,会怎样? – simonlchilds

+1

该网站将在iPhone上使用,除此之外,人口统计可能不知道如何清除cookie,更不用说知道它们是什么。 – rn10950

0

要使用Javascript设置cookie,请将document.cookie对象设置为[cookiename]=[cookievalue];expires=[expirydate]格式的字符串值。在这种情况下,似乎你只需要设置一个cookie,任何cookie,所以也许只是“完成=真”或其他。

// get today's date plus 2 days 
var expiration = new Date(); 
expiration.setDate(expiration.getDate() + 2); 

// add cookie "done=true" with expiration 
document.cookie="done=true;expires=" + expiration.toUTCString(); 

要检查一个cookie已经设置,再次使用document.cookie,这将返回所有Cookie的分号分隔的列表。过滤它来找到你:

var myCookie = document.cookie.split(';').filter(function(item) { 
    return item.split('=')[0] == 'done'; 
}); 

如果Cookie设置,那么你可以做一个简单的重定向:

if (myCookie.length > 0) { 
    window.location = "cookie.htm"; 
} 

见MDN进一步info on cookies


强制性免责声明:很明显 - 正如其他人指出的那样 - 使用这种方法,用户将能够如果他们不在乎欺骗,因为任何人都可以只明确自己的饼干和绕过检查。即使您认为没有人会打扰,只需在服务器上添加“完整性检查”,并阻止任何投票次数超过X次的IP地址即可。