关于利用JS cookies 限制反复投票的问题,高分求助 140
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于利用JS cookies 限制反复投票的问题,高分求助 140相关的知识,希望对你有一定的参考价值。
我的求助地址是 http://zhidao.baidu.com/question/279531565.html 解决了 140分一并加给您
我刚写的一个demo,你先测试下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
function addCookie(objName, objValue, objYears)
/*添加cookie objName:cookie名称,objValue:cookie
存储的值,cookie过期的年数*/
var str = objName + "=" + escape(objValue);
if (objYears > 0) //为0时不设定过期时间,
浏览器关闭时cookie自动消失
var date = new Date(2049, 1, 1);
var ms = objYears * 365 * 24 * 3600 * 1000;
//cookie过期时间为objYears年
date.setTime(date.getTime() + ms);
str += "; expires=" + date.toGMTString();
document.cookie = str;
alert("投票成功!");
function getCookie(objName) //获取指定名称的
cookie的值
var arrStr = document.cookie.split("; ");
for (var i = 0; i < arrStr.length; i++)
var temp = arrStr[i].split("=");
if (temp[0] == objName) return unescape
(temp[1]);
function submits(objName, objValue, objYears)
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(objName);
if (cookie_pos != -1)
alert('您已经投过票了,请不要重复投
票!')
else
addCookie(objName, objValue, objYears)
</script>
</head>
<body>
<div align="center" width="100%">
<input id="Radio1" type="checkbox" name="r"
value="1" onclick="check(this)" />1
<input id="Radio2" type="checkbox" name="r"
value="2" onclick="check(this)" />2
<input id="Radio3" type="checkbox" name="r"
value="3" onclick="check(this)" />3
<input id="Radio4" type="checkbox" name="r"
value="4" onclick="check(this)" />4
<input id="Radio5" type="checkbox" name="r"
value="5" onclick="check(this)" />5
<input id="Radio6" type="checkbox" name="r"
value="6" onclick="check(this)" />6
<input id="Radio7" type="checkbox" name="r"
value="7" onclick="check(this)" />7
<input id="Radio8" type="checkbox" name="r"
value="8" onclick="check(this)" />8
<input id="Radio9" type="checkbox" name="r"
value="9" onclick="check(this)" />9
<input id="Radio10" type="checkbox" name="r"
value="10" onclick="check(this)" />10
<input id="Radio11" type="checkbox" name="r"
value="11" onclick="check(this)" />11
<input id="Radio12" type="checkbox" name="r"
value="12" onclick="check(this)" />12<br />
<input id="enter" type="button" value="提交投
票" onclick="submits('toupiao','toupiao_value',5)" />
<br />
<br />
<label id="label_count">
</label>
</div>
<!--(可多选,最多选择十位)-->
<script type="text/javascript">
var checks = 0;
var oenter = document.getElementById("enter");
oenter.disabled = true;
function check(obj)
if (obj.checked)
checks += 1;
else
checks -= 1;
if (checks > 10)
checks -= 1;
obj.checked = false;
alert("您已经选择了 " + checks + " 位候选
者,不能再选了!\r\n如果要一定选择此项,请去
掉一些其他项再选择!");
if (checks < 1)
oenter.disabled = true;
else
oenter.disabled = false;
</script>
</body>
</html> 参考技术A 利用http://www.w3ceye.com/article.asp?id=61你提供的这个设置
至于cookie时间 你就找expires*24*60*60*1000; 这个是设置1天后过期 想多久就剩多久
if(cookies.read(name)) 假如存在cookie 则 说明投过了
alert("你已经投过票了,明天继续吧.");
愿意记录下ip 就记录下ip
else
if (存在ip)
投过了
cookies.set(name,"voted",1); 设置cookies
else
记录ip到数据库 'ajax 实现应该是
cookies.set(name,"voted",1); 设置cookies
追问
我明白这个道理。
我原有的代码 自带有判断IP的问题。 所以IP判断不需要。
劳烦您如果有时间,直接把代码套入修改一下吧, 我实在对JS一点也不懂了。 真是不好意思。
比如我原先的按钮,是勾选后才会可用,有相关判断, 怎么导入这个alert 效果。
视频投票之每日一票-jquery.cookie.js篇
需求:不论是游客还是评委进入系统,每日只能对两类视频中的一个视频进行一次投票(点赞)
解决过程:
听到最后这个需求的时候,我就想,甲方是不是把这个系统当作了微信公众号的那些投票,我这是赤果果的 web 系统啊,和那些微信公众号能相提并论吗?不能。
一开始我的切入点是,获取那些访问用户的 ip,并记录保存。然后在数据库进行数据过期删除操作。
然而,难度在于1.在自己本地不能进行多用户访问获取 ip 的操作;2.mongo 数据库是可以设置过期时间自动删除列数据,但有局限且我自己尝试并没有成功
后来,明白了要从 cookie 入手的,只有这样才能做到设置 cookie 存在的时间为一天,以及投票行为的保留
jquery.cookie.js 为一把利器,度娘搜一下,前辈们的教学都很清楚。
我这里应用的是,当点击投票按钮之后,设置唯一的 cookie,只要再次点击任何投票按钮之后,判断这个唯一的 cookie 是否为空即可。
% for v in video1 %
$("#zan- v.id ").click(function ()
if ( $.cookie("grade1") != null)
alert('今日已投票,请退出');
else
if (this.name == "iconfont zan")
this.innerHTML = "<i class='iconfont unzan'></i>";
this.name = "iconfont unzan";
var likes = v.like_num +1;
var url = " url_for('grade.make_likes', id=project.id) ";
var data_dic =
'like': likes,
'video': ' v.id '
;
$.ajax(
type: 'POST',
url: url,
data: JSON.stringify(data_dic),
contentType: 'application/json; charset=UTF-8',
dataType: 'json',
success: function (data)
window.history.back();
);
$.cookie("grade1", "weikeshipin", expires:1);
alert("投票成功");
);
以上是关于关于利用JS cookies 限制反复投票的问题,高分求助 140的主要内容,如果未能解决你的问题,请参考以下文章