关于利用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的主要内容,如果未能解决你的问题,请参考以下文章

视频投票之每日一票-jquery.cookie.js篇

视频投票之每日一票-jquery.cookie.js篇

防刷票系统的方案

WP-Polls 将 IP 限制设置为 2

js操作cookie简单封装

关于浏览器cookie的小知识