请教:如何用PHP程序限制一个IP地址一天只能投票3次呢?

请教:如何用PHP程序限制一个IP地址一天只能投票3次呢?,第1张

1、可以用MySQL 或者用Nosql记录 新建一个投票IP的数据表,字段是IP,投票次数

2、每次用户投票时,搜索表是否存在该IP:

i、 如果不存在新增一条记录,

ii、否则判断访问次数是否大于3次:

1) 没有更新访问次数;

2)大于3次就return false;

3、弊端:当然这种情况不能避免使用代理来刷票的情况。

建议:用Nosql比较好,高并发,实时性好。

可以在数据库里加入一张表,记录投票人的IP,和设票次数,投票时,先作验证。

在投票时,先获得用户IP,

在表中查出当前IP的记录,

如果为空,

则向数据库加入一条记录,投票成功

否则

判断当前IP已经投票次数

如果投票次数过大,提示投票失败

否则

更新数据库,把当前IP的投票次数加一,投票成功

这有个获取IP的函数。

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9988214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存