当前位置:首页 > 热点 > DZ论坛注册登陆代码

DZ论坛注册登陆代码

2026-10-17 05:44:08 [百科] 来源:力不从心网

Discuz! 的论坛注册登陆模块,说穿了就是注册一套围绕 member 表的增删改查逻辑。但真要把代码写稳,登陆代码光会调 insert 和 select 远远不够。论坛我见过太多人直接照搬官方默认文件,注册结果用户注册时提示“用户名已存在”,登陆代码查数据库却根本没有那条记录——问题出在缓存层没清干净,论坛或者 common_member 和 common_member_field_home 两张表的注册数据没同步写入。

先看注册。登陆代码入口文件通常是论坛 member.php 里 mod=register 的分支。核心逻辑在 source/module/member/member_register.php。注册提交表单后,登陆代码程序会依次做几件事:检查 $_G['setting']['regstatus'] 是论坛否允许注册、验证验证码、注册过滤用户名敏感词。登陆代码这里有个容易忽略的点:Discuz! 默认用 $_G['setting']['regctrl'] 控制同一 IP 的注册间隔,如果这个值设成 0,那同一秒内可以无限注册,垃圾账号能瞬间灌满你的 common_member 表。

用户数据写入时,member 表存的是基础字段:uid、username、password、email、regdate。密码不是明文,走的是 md5(md5($password).$salt),salt 是随机生成的六位字符串,存在 common_member 的 salt 字段里。验证密码时再把这个 salt 取出来拼回去比对。这套哈希方式现在看很弱,但 Discuz! 老版本一直这么干,改起来牵一发动全身,所以很多站长干脆加个 password_verify 的钩子插件来补强。

登陆部分更绕。用户提交用户名和密码后,source/module/member/member_logging.php 先查 common_member 表,拿到 uid 和 salt。比对密码通过后,不是直接写 session 就完事。Discuz! 会接着做三件事:更新 common_member_status 里的 lastvisit、lastip;检查 common_member_count 里的积分和用户组是否过期;最后才生成 auth 验证串,写进 common_member 的 authstr 字段。这个 authstr 才是后续所有页面判断登陆状态的依据,session 里存的只是 uid 和 auth 的映射。

我遇到过一种情况:用户登陆后点任何链接都跳回登陆页。查了半天,发现是 common_member 表的 authstr 字段长度设成了 char(10),而程序生成的 auth 串有 16 位,插入时被截断,导致每次验证都失败。把字段改成 varchar(255) 后立刻正常。这种坑官方文档不会写,只有踩过才知道。

再说验证码。Discuz! 默认用 seccode 类生成图片,但很多站长图省事直接关掉验证码,结果登陆接口被暴力破解。其实不用完全关闭,可以改成 seccode 的 ttf 模式,或者把验证码触发条件设成“密码错误三次后强制显示”。代码里改 $_G['setting']['loginfailednum'] 这个值就行,默认是 5,调到 3 更安全。

登陆成功后,member_logging.php 会调用 setloginstatus() 函数,这个函数在 function_member.php 里。它负责写 cookie,cookie 前缀是 $_G['config']['cookie']['cookiepre'],通常长这样:cdb_auth、cdb_salt。如果网站换了域名,cookie 作用域没跟着改,用户就会反复被登出。改 config/config_global.php 里的 cookiepath 和 cookiedomain 能解决。

最后提一句安全。Discuz! 的登陆接口默认没有频率限制,有人写脚本每秒提交上百次密码。加个 common_member 表的 failedlogins 字段记录失败次数,超过阈值就锁定账号 15 分钟,代码量不超过二十行,但能挡掉九成以上的撞库攻击。别等用户数据泄露了才想起来补。

(责任编辑:时尚)

推荐文章
  • 网站可用性分析

    网站可用性分析 一个用户点开你的网站,三秒内没找到想要的东西,他走了。五秒内页面还在转圈,他又走了。十秒内看不懂你的产品是干嘛的,他再也不会回来。这不是我编的,这是Google研究院做过上千次眼动实验得出的结论——用 ...[详细]
  • 买一个域名要花多少钱

    买一个域名要花多少钱 我去年给一个业余项目买域名,在Namecheap上花了1.99美元——那是第一年的促销价。第二年续费,直接跳到24.98美元。你要是觉得这就算完了,那还早着呢。 域名这玩意儿,价格区间能从几块钱到上亿 ...[详细]
  • 湖州日报联系号码

    湖州日报联系号码 湖州日报的联系电话,我是在一个雨夜翻到的。那天家里水管爆了,物业电话打不通,社区网格员的手机也关机,我翻遍手机通讯录,最后在抽屉底层一张泛黄的报纸中缝里,看到了那个号码。 报纸是2021年的,头版印着 ...[详细]
  • sqlmap安装使用教程

    sqlmap安装使用教程 sqlmap这东西,用好了是利器,用不好就是给自己挖坑。今天不聊虚的,直接说怎么装、怎么用,都是实操干货。 先讲安装。sqlmap是Python写的,所以你得先有Python环境。Windows用户去 ...[详细]
  • 在线推广网站的方法

    在线推广网站的方法 我见过太多人把预算砸进百度竞价,钱烧完了,网站还是那个网站,连个水花都没溅起来。去年有个做手工皮具的朋友,花了两万块投关键词,结果咨询量不到二十条。问题出在哪?他压根没搞明白,在线推广不是撒钱,是找对 ...[详细]
  • centos ntpdate安装

    centos ntpdate安装 CentOS 7 自带的时间同步工具是 chrony,但很多老派运维还是习惯用 ntpdate 做一次性校时。原因很简单——有些内网机器压根不允许长期开放 UDP 123 端口,chrony 那种常 ...[详细]
  • 欧盟官方公报官网中文

    欧盟官方公报官网中文 欧盟官方公报官网Official Journal of the European Union)的中文界面,其实是个挺容易被人忽略的存在。它藏在欧罗巴.eu域名深处,没有花哨的动效,也不主动推送新闻。但 ...[详细]
  • 华为kpi绩效考核指标

    华为kpi绩效考核指标 华为的KPI考核,说白了就一句话:分钱的艺术。但分钱之前,得先算账。任正非说过,华为的KPI不是用来管人的,是用来牵引人的。这话听着玄乎,看他们基层怎么操作就明白了。 研发岗的KPI里有个硬指标叫“产 ...[详细]
  • ai脱装免费软件

    ai脱装免费软件 “AI脱装免费软件”这个词,在搜索引擎里每天有上万人敲进去。你输入它,跳出来的链接十有八九带着病毒,剩下两成是钓鱼网站。真正能用的工具,反而藏在GitHub的某个犄角旮旯里,名字叫“DeepNude” ...[详细]
  • 漏洞端口

    漏洞端口 凌晨三点,我盯着Nmap扫描结果里那个孤零零的445端口,屏幕的光把脸映成青白色。这不是什么高深攻击,就是内网一台老掉牙的Windows Server 2003,开着文件共享,密码是admin。我甚至 ...[详细]
热点阅读