修改限制discuz论坛注册名长度

论坛这种网站形式火热以来,就不断受到垃圾ID注册者、垃圾贴的骚扰,特别是现在网络营销的兴趣,大量的人肉注册id和人肉发贴的形式也广为出现,更有甚至,利用软件来注册ID,收藏发软文。总之,无所不用其极。今天,Linker介绍的只是一个小方法,根据朋友论坛的一些情况,做一些小小的限制。

其实限制论坛用户名注册长度,phpwind论坛很容易设置,奇怪discuz论坛搞得这么复杂?

discuz论坛,由下砂的说法,不建议大家来修改论坛用户名的长度,Linker也看了一些修改的方法,确实涉及到很多数据库表中字段的长度,以及程序代码上的配合,对于一般网站站长来讲,这人修改是有些危险,会引起其他一连串的问题,这个方法,不多讲,稍后Linker稍转载一些。

Linker今天所说的修改方法,不是要延长用户名的长度,而是要限制注册长度不能够太小,因为一些论坛注册机,会随机注册一些中文夹杂英文或者数字的注册,Linker大概浏览了一下,长度不外乎两个汉字一个英文或者一个数字,前段同限制了夹杂数字的注册,情况略有好转,但发现还有不少是汉字夹杂英文的注册,明显不知所以,明显是人肉营销者的ID,因此,考虑把discuz论坛用户名长度由最小的3个字符限制到7个字条,这样最少需要三个汉字和一个字母或者7个字母才能验证注册,两个汉字夹杂一个字母的注册就无法通过了。

修改方法:

打开模板文件中:templates.lang.php,查找“用户名小于3个字符”,修改为“用户名小于7个字符”,例如下:

 ‘register_profile_profile_username_tooshort’ => ‘用户名小于7个字符’,

修改模板文件:register.htm 搜索以下内容:

if(unlen < 3 || unlen > 15) {
messagehandle_register(1, unlen < 3 ? profile_username_tooshort : profile_username_toolong);
return;
}

修改为:

 if(unlen < 7 || unlen > 15) {
  messagehandle_register(1, unlen < 7 ? profile_username_tooshort : profile_username_toolong);
  return;
 }

大家对比一下就明白了,把3改为7.

修改说到这里,Linker就打算适可而止了,不打算再作进一步的限制和研究了,其实也没找到真正的限制修改代码,内行人都看得出来,这只是一个表现现象,实际上即使注册时提示有“7个字符”的限制,你依然可以提交注册。

仅算抛砖引玉吧!欢迎高人再继续给一个指点。

discuz论坛也有修改用户名注册长度的提问,但官方对此不热情,可能修改实在过于繁琐,Linker搜索到一篇比较详细点的:

DISCUZ修改注册用户名长度的办法 discuz修改注册用户名的长度限制的方法 discuz的用户名限制不能超过15个字符长度,如果想要改的更长一些可以按照下面的方法修改,不过这样修改之后,如果将来升级的时候可能会带来麻烦,如果discuz新版本仍然将用户名限制在不超过15个字符,将需要对新版本做类似修改才能使用,并且有些需要增加数据表的插件可能也需要做调整.请想好了再做哦.以下按照把用户名长度限制在20个字符进行修改的,如果你想改成其他数值,那把下面的内容里的20改成其他数字就可以了!

首先,到discuz后台系统工具里数据库升级里执行:

alter table cdb_activityapplies modify username varchar(20);
alter table cdb_adminnotes modify admin varchar(20);
alter table cdb_announcements modify author varchar(20);
alter table cdb_banned modify admin varchar(20);
alter table cdb_creditslog modify fromto varchar(20);
alter table cdb_members modify username varchar(20);
alter table cdb_orders modify admin varchar(20);
alter table cdb_posts modify author varchar(20);
alter table cdb_pms modify msgfrom varchar(20);
alter table cdb_promotions modify username varchar(20);
alter table cdb_ratelog modify username varchar(20);
alter table cdb_rsscaches modify author varchar(20);
alter table cdb_sessions modify username varchar(20);
alter table cdb_threads modify author varchar(20);
alter table cdb_threads modify lastposter varchar(20);
alter table cdb_threadsmod modify username varchar(20);
alter table cdb_trades modify seller varchar(20);
alter table cdb_trades modify lastbuyer varchar(20);
alter table cdb_validating modify admin varchar(20);
alter table cdb_words modify admin varchar(20);

然后修改
各个模板目录下的register.htm(如果有的话)
把 maxlength="15" id="username" 里的15改成20
把 if(unlen < 3 || unlen > 15) { 里的15改成20

修改register.php把 if(strlen($username) > 15) { 里的15改成20

修改各个模板下的templates.lang.php,messages.lang.php(如果有的话)
把 超过 15 个字符 里的15改成20

修改wap/include/login.inc.php
把maxlength=\"15\" 里的15改成20

修改wap/include/pm.inc.php
把maxlength=\"15\"里的15改成20

最后就是修改api目录下的 passport.php,shopex.php,siteengine.php

if(strlen($memberfields[‘username’] = preg_replace("/(c:\\con\\con$|[%,\*\"\s\t\<\>\&])/i", "", $memberfields[‘username’])) > 15) {
$memberfields[‘username’] = substr($memberfields[‘username’], 0, 15);
}
里的15改成20

这里discuz论坛也有一篇方法和对文件的修改,由于需要金币购买,Linker不多转了:

http://www.discuz.net/viewthread.php?tid=1279272

3 thoughts on “修改限制discuz论坛注册名长度

Comments are closed.