黑马程序员技术交流社区

标题: 如何使用Session限制论坛用户灌水呢? [打印本页]

作者: 余志强    时间: 2011-10-2 15:53
标题: 如何使用Session限制论坛用户灌水呢?
一些网站通常次采用Session中记录用户发帖的时间,然后通过一个时间间隔来限制用户连续发帖的数量,怎么编写一个程序限定两次提交表单的最小时间间隔的程序来模拟这种应用呢?比如上一次发帖的时间是2011-10-2 15:50 那么必须等待1分钟才能继续发帖?
作者: 匿名    时间: 2011-10-2 15:56
使用多线程中的sleep。
作者: 许晨峰    时间: 2011-10-2 16:47
写的简便一点,就比如在jsp页面吧,使用小脚本,这样你看起来更方便一点。[code=java]<%
        long nowTime = new Date().getTime();//首先拿到当前时间
        Object obj = session.getAttribute("lastPost");//取得上一次发贴时间
        if(obj != null) {
                long lastPostTime = Long.valueOf(obj + "");
                if((nowTime - lastPostTime) / 1000 < 60){//比较日期
                        out.println("发贴时间间隔必须超过1分钟");
                } else {
                        //执行发贴语句
                        out.println("发贴成功!");
                        session.setAttribute("lastPost", nowTime);//要记得将此次发贴的时间记录到session中
                }
        } else {//obj为空,说明上一次没有发贴,可以直接发贴
                //执行发贴语句
                out.println("发贴成功!");
                session.setAttribute("lastPost", nowTime);//要记得将此次发贴的时间记录到session中
        }
%>[/code]
[ 本帖最后由 许晨峰 于 2011-10-02  16:54 编辑 ]
作者: 匿名    时间: 2011-10-2 17:53
有时我们要限制用户重复刷新一个页面。很多站点对于录入操作都用验证码来限制恶意灌水。但是如果是在一套web管理系统中,执行一段没有界面的逻辑操作代码时,就不能用验证码了。我们一般用session来限制。下面就是一个包装的函数,用法很简单。

'操作限制函数
'塞北的雪 制作
'www.knowsky.com
'SessionName  session的名字
'SecondSpan   时间间隔(单位:秒)
function CanDoRepeat(SessionName,SecondSpan)
xx=timer()
if session(SessionName)="" then  
     session(SessionName)=xx
else
     if xx-session(SessionName)<SecondSpan then
        CanDoRepeat=false
     else
        session(SessionName)=xx
        CanDoRepeat=true
     end if
end if
end function
作者: 匿名    时间: 2011-10-2 18:03
标题: 回复 板凳 的帖子
。。。  。。。
作者: 梁锡伟    时间: 2011-10-2 18:05
每个发帖请求记录当前时间,和上一次比较
作者: 匿名    时间: 2011-10-2 19:18
再使用Session的getLastAccessedTime()方法取得一个session的上一次最后操作时间,然后再使用Session的getLastAccessedTime()取得本次操作的最后时间,然后用本次操作的最后时间减去上次操作的最后时间,如果大于一分钟就让客户提交,反之不让提交。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2