欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

老大,小弟有些迷惑的东西

程序员文章站 2022-06-09 15:14:37
...
请教各位老大,小弟有些迷惑的东西。
小弟的系统(一个cms)中有个搜索页面是这样的 以下代码是为了防止用户频繁的搜索
$lockfile = './time.lock.inc'; //time.lock.inc 内容为: 1337659312
$lasttime = file_get_contents($lockfile);

if(!empty($lasttime) && ($lasttime + $cfg_search_time) > time())
{
ShowMsg('请勿频繁操作','-1');
exit();
}
每次搜索完后会更新当前的时间到 time.lock.inc

这段代码其实是防止了所有的用户在指定$cfg_search_time内不能同时进行2次以上的操作,但是这样肯定不妥。
原因如下(不知是否妥当),请各位老大帮忙分析分析:
假如$cfg_search_time=1 同时有20人在并发搜索 理想情况中间不乱费一丝时间(服务器及网速消耗时间忽略不计)需要20秒

因为是这样 我想做下改进 在time.lock.inc存储2个信息 一个IP 一个时间戳
$dataiplist0=>array('14.453.22.55'=>1337659312,...);
?>
然后每次都获取一次IP 在每次搜索的时候针对指定IP来进行检测 同一IP1秒之内只能搜索一次,这样就可以并发搜索了,但是这里就有个问题 假如一个内网段的用户都是用同一个外网IP上网,这样就可能将整个内网都当成一个用户在处理了,不知道这些问题各位大哥遇到过没,怎么处理。

最后弱弱的问下,这样能有效的控制用户恶意骚扰吗,如果不能,各位大大是否能给个好的建议。。。




------解决方案--------------------
保存array到这个文件,
以session id为key,值为上次搜索的时间戳。
------解决方案--------------------
这样子,因为搜索的人应该不会很多,当然个别(动作)论坛除外
可以使用memcache 来保存数据

用ip+用户名+搜索时间的组合方式来判断


------解决方案--------------------
你一开始的锁定是针对所有用户的,所以用文件锁是正确的

后来你又想只锁定单个用户,那么用 session 就可以了
------解决方案--------------------
session控制即可, 如果要防黑客另当别论, session对它们毫无作用, 不提交cookie就是了.
------解决方案--------------------
新建一表,把搜索的用户放进去。判断是否有记录或者时间在一定范围内。就不让再查了
老大,小弟有些迷惑的东西

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频