2KB项目,专业的源码交易网站 帮助 收藏 每日签到

ecshop中红包编码生成规则分析和改进

  • 时间:2019-01-31 02:15 编辑:2KB 来源:2KB.COM 阅读:305
  • 扫一扫,手机访问
  • 分享
摘要: 我们知道在ecshop后台的促销管理里面,有红包的功能。ecshop红包的功能无非就是可以直接抵消现金的作用,ecshop红包有两类型,一种是直接发送到个人帐户上去的。就是存储在ecs_user_bonus表中的,这个一旦发送到客户的帐户上去。那
我们知道在ecshop后台的促销管理里面,有红包的功能。ecshop红包的功能无非就是可以直接抵消现金的作用,ecshop红包有两类型,一种是直接发送到个人帐户上去的。就是存储在ecs_user_bonus表中的,这个一旦发送到客户的帐户上去。那么意味着别人拿到了这个编码,也不能使用这个编码进行抵扣。另外一种ecshop红包就是线下发送的。当你得到这个编码,在红包的有效期内,可以使用该红包。      我们必须知道,ecshop的红包编码是有问题的。我们看flow.php      if (((!empty($bonus) && $bonus[&#39;user_id&#39;] == $_SESSION[&#39;user_id&#39;]) || ($bonus[&#39;type_money&#39;] > 0 && empty($bonus[&#39;user_id&#39;]))) && $bonus[&#39;order_id&#39;] <= 0)        这一句表示,就算是该编码没被使用。只要是发到个人帐户去之后。即使你登陆了,也不能通过这个编码来进行使用,所以这就是一大问题。       其次,我们看ecshop红包的编码生成机制。       $num = $db->getOne("SELECT MAX(bonus_sn) FROM ". $ecs->table(&#39;user_bonus&#39;));     $num = $num ? floor($num / 10000) : 100000;     for ($i = 0, $j = 0; $i < $bonus_sum; $i++)     {         $bonus_sn = ($num + $i) . str_pad(mt_rand(0, 9999), 4, &#39;0&#39;, STR_PAD_LEFT);         $db->query("INSERT INTO ".$ecs->table(&#39;user_bonus&#39;)." (bonus_type_id, bonus_sn) VALUES(&#39;$bonus_typeid&#39;, &#39;$bonus_sn&#39;)");         $j++;     }      首先我们看清楚,当你的红包编码达到了几百完以上,就容易产生重复的编码。其次,在录入红包编码的时候,根本没判断是否有重复的红包,这就造成了很大的问题,如果红包编码重复,那将是非常严重的问题     $db->query("INSERT INTO ".$ecs->table(&#39;user_bonus&#39;)." (bonus_type_id, bonus_sn) VALUES(&#39;$bonus_typeid&#39;, &#39;$bonus_sn&#39;)");     为了解决这个问题,首先我们必须保证在录入编码之前,确保该编码没重复,所以必须判断数据库中是否有该编码。那么我们就必须对bonus_sn 来进行扫描判断,那么多数据如何提高扫描速度呢。我们必须在bonus_sn上建立索引。其次,我们可以修改红包编码的规则。既然是十位,我们就可以用我们自己的办法来得到。     static function GenSecret($len=6, $type=self::CHAR_WORD)     {         $secret = &#39;&#39;;         for ($i = 0; $i < $len;  $i++) {             if ( self::CHAR_NUM==$type ){     if (0==$i) {      $secret .= chr(rand(49, 57));     } else {      $secret .= chr(rand(48, 57));     }             }else if ( self::CHAR_WORD==$type ){                 $secret .= chr(rand(65, 90));             }else{                 if ( 0==$i ){                     $secret .= chr(rand(65, 90));                 } else {                     $secret .= (0==rand(0,1))?chr(rand(65, 90)):chr(rand(48,57));                 }             }         }         return $secret;     }    这个方法,要强过ecshop红包默认的编码规则。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部