我正在开发一个投票网站,我只希望选民投票一次。这是一个3阶段的过程。第一页是选择你想为第二页投票的人确认该人(隐藏的单选按钮提交投票),第三页是感谢页面。我想检查第一页和第二页上的cookie并在第三页上写入cookie。我希望cookie在第一次导航到网站后的两天内过期。我想将已投票的人重定向到cookie.htm(与其他所有文件夹位于同一文件夹中)您将如何执行此操作?Javascript只投票一次Cookies
回答
我认为它基于来自某个已知网站的电子邮件地址,并要求有人确认电子邮件地址可能是您最好的选择。
我认为你最好的选择是有一个注册过程并强制用户登录投票。正如评论中提到的,你需要一些服务器端的魔法。
问题是,它将被用于一次性使用,所以真的没有使用/注册/登录的时间 – rn10950
那么你不能保证用户只会投一次。如果我清除了我的cookies,会怎样? – simonlchilds
该网站将在iPhone上使用,除此之外,人口统计可能不知道如何清除cookie,更不用说知道它们是什么。 – rn10950
要使用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地址即可。
- 1. Mysql - 每天投票一次
- 2. 限制每个用户只能投一次票(投票,Django的,蟒蛇)
- 3. 在投票系统上只允许每个人投一票
- 4. 验证用户投票的投票一次
- 5. cookie - 只投一次
- 6. Rails的JavaScript投票
- 7. 数字投票Javascript
- 8. 如何确保用户每个帖子只能投票一次
- 9. Django的客人只能投票一次轮询
- 10. 投票投票墙
- 11. 验证该用户只投一票
- 12. 从cookie中投票5次
- 13. PHP + Cookies:只显示一次消息
- 14. 投票与长投票
- 15. 投票重复投票
- 16. 如何防止游戏投票系统,人们可以每天投票一次?
- 17. Javascript投票和提交
- 18. 投票 - 票数与投票率?
- 19. 如何检查选民投票过一次,直到下次选举才能投下另一票?
- 20. 有没有办法在AngularJs中仅投一次或多次投票?
- 21. 基于投票投票的JQuery多个百分比投票
- 22. 评论与投票行为投票
- 23. 使用asp.net和sql投票投票
- 24. AngularJS投票系统 - 防止多投票
- 25. 投票栏显示没有投票
- 26. 如何投票投票系统?
- 27. Django投票:按投票排序
- 28. 检查用户是否投票投票
- 29. 独特的男女投票谁投票
- 30. 如何确保用户只能在24小时内投票一次
很好。我想要一杯啤酒和一个汉堡包。问题是什么? –
我建议你使用服务器端执行此任务(基于IP地址)。设置和阅读不是很可靠,因为用户可以清除cookie并重新投票。 –
这将被用作我在学校举行的歌唱比赛的iPhone调查。投票时间为五分钟。我只是想设法阻止人们再次投票。我无法做IP,因为所有的iPhone/iPod Touch都会连接到相同的热点(约500台设备)。 – rn10950