问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

限制IP访问网站次数的办法?

提问网友 发布时间:2022-04-21 22:02
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
2个回答
懂视网 回答时间:2022-05-03 19:20
有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次,类似这样的需求很容易用Redis来实现。

策略1:

在redis中保存一个count值(int),key为user:$ip,value为该ip访问的次数,第一次设置key的时候,设置expires。

count加1之前,判断是否key是否存在,不存在的话,有两种情况:1、该ip未访问过;2、该ip访问过,但是key已经过期了。那么此时需要再次设置一次expires。

如果用户访问的时候,判断count的值是否大于上限,如果低于上限,就处理请求,否则就拒绝处理请求。

策略2:

考虑这种情况,假设只允许用户60秒内访问100次,如果有一个用户在第1秒访问了1次,在第59秒的时候,访问了99次,然后在第61秒的时候,访问了100次。

如果按照策略1的情况处理,第1~60秒之间接受了100次,在第61秒接收100次请求,所以62~120这段时间内,不再处理该ip的请求。

貌似没问题,但是,细细思考一下,第59秒到61秒之间接受了99+100=199请求,时间间隔只有3秒。那么这样的话,最初的设计就存在问题了。

解决方案:可以使用redis的list(双向队列)数据结构,key就是user:$ip,也就是每一个ip设置一个双向队列,每次请求到达的时候,进行如下判断:

1、如果list中的元素个数少于100个,那么就将请求到达时的时间戳Lpush到list中。

2、如果list中的元素多余100个,那么,就取出Lindex(-1)即最右边,也就是100个请求中最早的那一个请求的时间戳,如果最早的时间戳和当前时间戳相差超过60秒,那么表示第一个请求已经过期了,就将第一个请求出队Rpop。然后将当前时间戳入队Lpush。

更多redis知识请关注redis入门教程栏目。

热心网友 回答时间:2022-05-03 16:28
用COOKIE记录*IP的访问次数就可以噻.超过次数就禁止访问..
或者用数据库记录更好...
比如数据库里做一个表记录(如表ipx).

ID(自动编号) 时间 IP(无重复索引) 访问次数(默认为0) 设置次数(默认为0)

1.访问时:
ip00=获取访问者IP
date00=获取当时时间(年月日)
select * from ipx where ip=ip00

if rs.bof and rs.eof then

'允许访问

else

date01=数据库里的"时间"项
t01=数据库里的"访问次数"
t02=数据库里的"设置次数"

if date01=date00 then
'表示已经访问过
if t01>=t02 then
这里调用禁止访问函数(),访问终止
end if

"访问次数"+1

else
'表示今天首次访问
if t01>=t02 then
这里调用禁止访问函数() ,访问终止
end if

更新"时间"字段为当天时间(年月日)
"访问次数"+1

end if

end if

这只是我想到的一种大概的方法,具体怎么写你自己去想吧.

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

相关推荐
  • redis限制IP访问次数的方法

    redis限制IP访问次数的方法

    redis限制IP访问次数的方法:有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次,类似这样的需求很容易用Redis来实现。策略1:在redis中保存一个count值(int),key为user:$ip,value为该ip访问的次数,第一次设置key的时候,设置expires
    查看详情
  • 限制网站频繁访问

    限制网站频繁访问

    限制网站频繁访问:CREATE TABLE [dbo].[Zz_AccessIP]( [IP] [nvarchar](50) NOT NULL, [FirstDateTime] [datetime] NOT NULL, [LastDateTime] [datetime] NOT NULL, [Times] [int] NOT NULL, CONSTRAINT [PK_Zz_AccessIP] PRIMARY KEY CLUSTERED ( [IP] ASC )WITH (PAD_INDEX =
    查看详情
  • 如何限制访问者的ip(PHPBB的代码)

    如何限制访问者的ip(PHPBB的代码)

    如何限制访问者的ip(PHPBB的代码): 如何限制访问者的ip(PHPBB的代码) Code: <php/**************************************************************************** admin_user_ban.php* -------------------* begin : Tuesday, Ju
    查看详情
双方离婚住房公积金怎么分割 天津四中的校服是什么样子的呢?? 住房公积金离婚后该怎样分割 沈阳浑南四中校服那里卖 如何限制IP访问我的网站 离婚住房公积金如何分割 湛江市第四中学新校区校服好看吗?求图。 饭堂需要... 如何限制电脑访问 IP类型网站 离婚时住房公积金可进行分割吗 北京四中校服 离婚时,住房公积金能分割吗 如何限制网站后台的IP访问 怀化市第四中学女生校服`? 离婚时一方的住房公积金是否可以分割 电脑打开网页被限制IP怎么解决! 衡阳市四中的校服是什么样的呀! 离婚后住房公积金如何分割 广州市四中的校服边度有得卖?(要在学校外卖的)... 可以限制固定ip访问固定网站吗 如果口香糖粘在地上该怎么处理掉 广东湛江市四中报名时忘记订校服了,开学再订的话还... 离婚后怎样分割住房公积金 南阳四中的校服多少钱 离婚时住房公积金可以取出分割吗? 汕头四中的校服去哪里买 如何屏蔽某个IP访问我的网站?(ASP的)! 离婚时住房公积金可以分割吗 四中校服 夫妻离婚住房公积金怎么分割 徐州二中、三中、四中的校服分别是什么样的? 离婚住房公积金怎么分割 公积金在离婚时是否可以作为共同财产进行分割 hdmi转tpyc主机投手机? 有hdmi接口的手机需要转换器吗? HDMI线要怎么和手机连接? 哪些手机支持HDMI功能 hdmi信号无线投屏到手机或平板 苹果手机与HDMI怎样连接? oppor15有HDMI功能吗 hdmi接口可以转换USB给手机充电吗充电吗
Top