关于用IP限制投票的问题

gudujianke 2008-06-29 05:02:33
不知道下面这段代码有什么不对的,在我调试的,本机上,如果是同一IP就不能添加,但是在其它机子上(同一局域网内)同一台机子,同一个IP 也可以投票,请大侠指点一下。










<%
dim subject,xm1,xm2,xm3,xm4,xm5 '定义变量
set rs=server.createobject("adodb.recordset") '用createobject方法创建recordset对象
rs.open "select * from vote",conn,1,1
subject=rs("subject")
xm1=rs("xm1")
xm2=rs("xm2")
xm3=rs("xm3")
xm4=rs("xm4")
xm5=rs("xm5")
rs.close
set rs=nothing
%>


<%
dim myip,rsip
myip=request.ServerVariables("REMOTE_ADDR")
if request("act")="save" then
set rsv=server.createobject("adodb.recordset")
rsv.open "select * from vote",conn,1,3
vote=split(rsv("vote"),",")

set rsip=server.createobject("adodb.recordset")
rsip.open "select * from ip",conn,3,2
if myip=rsip("ip") then
%>
<%
response.write "<script>alert('你已经投过票了.');</script>"
response.redirect "view.asp"
else
%>
<%
if request.form("xm1")="" then
vote(0)=vote(0)
elseif request.form("xm1")="1" then
vote(0)=vote(0)+1
rsv("all")=rsv("all")+1
end if
if request.form("xm2")="" then
vote(1)=vote(1)
elseif request.form("xm2")="1" then
vote(1)=vote(1)+1
rsv("all")=rsv("all")+1
end if
if request.form("xm3")="" then
vote(2)=vote(2)
elseif request.form("xm3")="1" then
vote(2)=vote(2)+1
rsv("all")=rsv("all")+1
end if
if request.form("xm4")="" then
vote(3)=vote(3)
elseif request.form("xm4")="1" then
vote(3)=vote(3)+1
rsv("all")=rsv("all")+1
end if
if request.form("xm5")="" then
vote(4)=vote(4)
elseif request.form("xm5")="1" then
vote(4)=vote(4)+1
rsv("all")=rsv("all")+1
end if

if myip <> rsip("ip") then
rsip.addnew
rsip("ip")=myip
rsip.update
rsip.close
end if
set rsip=nothing
rsv("vote")=vote(0)&","&vote(1)&","&vote(2)&","&vote(3)&","&vote(4)&","
rsv.update
rsv.close
set rsv=nothing
response.redirect "view.asp"
end if
end if

%>
...全文
506 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kqogje 2008-06-30
  • 打赏
  • 举报
回复
用session也不错
If InStr("|"&Session("voted")&"|","|"&ID&"|") > 0 Then
Response.Write("<script language='javascript'>alert('您已经投过票了,请不要重复投票');history.back();</script>")
Response.End()
End If

其中ID为某个投票的编号,这个可以限制本机投票
但过了session的时间段后,本机还是可以再投票的
wansai00 2008-06-30
  • 打赏
  • 举报
回复
那就读网卡的MAC, 放到Application里

就能解决 同一IP的局域网 和 session的问题
smartcatiboy 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 kqogje 的回复:]
用session也不错
If InStr(" ¦"&Session("voted")&" ¦"," ¦"&ID&" ¦") > 0 Then
Response.Write(" <script language='javascript'>alert('您已经投过票了,请不要重复投票');history.back(); </script>")
Response.End()
End If

其中ID为某个投票的编号,这个可以限制本机投票
但过了session的时间段后,本机还是可以再投票的
[/Quote]

采用session是不可行的
若对方不通过浏览器的session机制,可并发连接产生不同的session。
smartcatiboy 2008-06-30
  • 打赏
  • 举报
回复
set rsip=server.createobject("adodb.recordset") 
rsip.open "select * from ip",conn,3,2
if myip=rsip("ip") then
这里有毛病,应该改为

"select * from ip where ip='" & replace(myip,"'","''") & "'"


你的SQL没有条件查询,于是只取rst第一条,它总是你第一次add的127.0.0.1

cuidenghong123 2008-06-29
  • 打赏
  • 举报
回复
仔细检查的查询是否错误
Anlige 2008-06-29
  • 打赏
  • 举报
回复
用cookies记录比较好,如果一个机子有好几个人用呢?那你不就损失了其他的用户~你这样的话在一个网吧里的所有人只能投一票~
jzh333 2008-06-29
  • 打赏
  • 举报
回复
rsip.open "select * from ip",conn,3,2
这个查出来可不止一条记录吧
jzh333 2008-06-29
  • 打赏
  • 举报
回复
rsip.open "select * from ip",conn,3,2
if myip=rsip("ip") then

这句改成
rsip.open "select * from ip where ip="'&myip&'"
if rsip.eof then
gudujianke 2008-06-29
  • 打赏
  • 举报
回复
回四楼的


你说的那句话没有显示 ,但是,同一IP也可以继续投票。
gudujianke 2008-06-29
  • 打赏
  • 举报
回复
大侠,还是有同样的问题喔。
jzh333 2008-06-29
  • 打赏
  • 举报
回复
你的意思是不在主机上可以投多次票?"你已经投过票了"这句有没有显示
gudujianke 2008-06-29
  • 打赏
  • 举报
回复
IP是判断正确的,本机测试的浏览器是IE7
其它机子的浏览器是IE6
jzh333 2008-06-29
  • 打赏
  • 举报
回复
会不会和浏览器有关系,获取IP换成下面的试试
Private Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
end function
myip=getip()

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧