很多投票比赛等,都需要用到限制IP,于是用投票来演示下限制IP。以下用到两种,个人能力有限,都有欠缺。
<%
'===IP限制开始
name1=request("name")
'以下获取投票者IP
Function getIP()
getIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If getIP = "" Then getIP = (Request.ServerVariables("REMOTE_ADDR"))
End Function
'通过session来判断是否已经投过票。
If Session("tp")="yes" Then
Response.write("<script language='javascript'>alert('您已经投票,请稍后再来投票!');location='index.asp';</script>")
Response.End()
End If
'通过数据库记录ip来判断是否投过票,以下比较时间间隔较小时,请将以上session判断去掉,否则会受session影响
Set rs2=Server.CreateObject("ADODB.RecordSet")
rs2.open "Select * from Tp where pid="&pid&" and ip='"&getIP&"' and datediff('n',addtime,now())<5",conn,1,3
'判断addtime-now的时间是不是小于5分钟,注意n,即比较分钟。
'如果要更换这里限制的时间,关于datediff用法请参考:http://www.mykdx.com/asp/aspjc/vbscript/200807/357.shtml
If not(rs2.eof and rs2.bof) Then '如果上面数据库查询语句有结果,证明,在数据库里面有小于5分钟的记录。
Response.Write "<script>alert('你已经投过票了!');location='index.asp';</script>"
Response.End
Else
rs2.addnew
rs2("ip")=getIP '记录IP
rs2("addtime")=now() '记录当前时间
rs2("name")=name1 '记录你想记录的信息,如投票人填写的姓名
rs2.update
End If
rs2.close
Set rs2=nothing
conn.execute("delete from Tp where datediff('h',addtime,now())>=1")
'清除时间间隔大于1小时的记录。
'===IP限制结束
set rs_tp=server.CreateObject("ADODB.RecordSet")
sql_tp="select * from bisaitable where id="&pid
rs_tp.open sql_tp , conn,1,1
if rs_tp("sh")=1 then '检查是不是正常比赛选手
sql="update Vote set ps=ps+1 where id="&pid
conn.execute(sql)
Session("tp")="yes"
else
Response.Write "<script>alert('该选手还未参与到现阶段投票选手内!');location='index.asp';</script>"
Response.End
end if
%>