个人资料

跳过导航链接首页 > 博客列表 > 博客正文

服务器加入响应时间间隔,处理无效重复点击

:

为节约服务器性能,防止用户无效快速点击。引入一个处理时间间隔,时间间隔内不处理。以发送邮件验证码为例

该解决方案为非session方式,首先建立两个静态共享字段分别存储email的hash代码和上次响应的时间

每次响应之前比较本次email的hash值是否和上次相同

如果相同,则判断时间间隔是否短于设定值,如果间隔短,则不响应。

因为静态变量为所有实例共享,所以如果有两个email有共同的hash,则可能出现一个email发送验证码而另一个无法发送送的情况。

同时满足hash和时间的要求几率太低,所以使用hash值是可行的。如果是其他处理程序,把email更换为ip地址也能达到同样的效果

参考代码如下:

    public static int EmailHash =0;
        public static DateTime lastDate;

        /// <summary>
        /// 发送邮箱验证码
        /// </summary>
        /// <param name="email">邮箱地址</param>
        /// <returns></returns>
        [WebMethod]
        public ResponseResult SendEmailCode(string email)
        {

            ResponseResult result = new ResponseResult();

            int ValidateNO = user.GetAssociateCode(email);

            if (EmailHash == email.GetHashCode())
            {
                try
                {
                    if (lastDate!=null)
                    {
                        TimeSpan d = DateTime.Now - lastDate;
                        if (d.TotalSeconds <= 15)
                        {
                            result.IsSuccess = false;
                            result.MsgAlert = "发送邮件失败,时间间隔太短";
                            return result;
                        }
                    }
                }
                catch (Exception)
                {

                }

            }

            bool isSendEmailSuccess = BlogHelpper.SendEmail(email, "完成注册账户注册,请接收验证码,", "如非本人操作请忽略,验证码是:" + ValidateNO.ToString());
            if (isSendEmailSuccess)
            {
                result.IsSuccess = true;
                result.MsgAlert = "发送验证码成功,查收邮件后填写验证码完成最后确认";
                //记录上次发送时间
                lastDate = DateTime.Now;
                //记录email的 hush_code
                EmailHash = email.GetHashCode();
            }
            else
            {
                result.IsSuccess = false;
                result.MsgAlert = "发送邮件失败,出现未知错误";
            }

            return result;
        }
    }


songshizhao
最初发表2018/11/23 1:00:22 最近更新2018/11/23 1:00:22 1622
为此篇作品打分
10