- 你输入的验证码确实是错的(最常见)。
- 你输入的验证码是对的,但系统仍然报错(需要技术排查)。
确认输入的验证码是否正确
在尝试任何技术操作之前,请先确保:

(图片来源网络,侵删)
- 区分大小写:DedeCMS 的验证码通常是区分大小写的,比如你看到的是
Abc,你必须输入A(大写)、b(小写)、c(小写),很多人因为没开大写锁定键而输错。 - 看清字符:验证码中的
0(数字零)和O(字母O)、1(数字一)、l(小写L)、I(大写i)很容易混淆,请仔细辨认。 - 是否过期:验证码通常有有效期(比如几分钟),如果你停留太久再输入,就会过期导致错误,刷新页面获取新的验证码即可。
- 是否刷新:每次登录都应该获取并输入当前页面显示的验证码,而不是上一个页面或记住的验证码。
技术排查与解决方法
如果你确定输入无误,或者刷新页面后仍然报错,那么就需要从技术和系统层面来排查了,请按照以下顺序检查:
检查 GD 库是否开启
验证码图片是服务器动态生成的,这需要 PHP 的 GD 库 支持,GD 库未开启,验证码图片将无法显示,或者显示为空白/破碎的图片,导致验证失败。
如何检查和开启:
-
检查方法:
(图片来源网络,侵删)- 在你的网站根目录下创建一个名为
info.php的文件。 - 在文件中输入
<?php phpinfo(); ?>。 - 访问这个文件(
www.yourdomain.com/info.php)。 - 在页面中按
Ctrl+F搜索 "GD",查看 "GD Support" 是否为enabled,如果为enabled,说明 GD 库已开启。
- 在你的网站根目录下创建一个名为
-
解决方法:
- GD 库未开启:
- 如果你有自己的服务器(VPS/独立服务器):编辑
php.ini配置文件(通常在/etc/php/7.x/cli/php.ini或类似路径),找到;extension=gd这一行,去掉前面的分号 ,然后保存,重启你的 Web 服务(如 Apache 或 Nginx)即可。 - 如果你使用的是虚拟主机:你无法直接修改
php.ini,需要联系你的主机服务商,让他们帮你开启 GD 库,这是最常见的虚拟主机导致验证码失败的原因。
- 如果你有自己的服务器(VPS/独立服务器):编辑
- GD 库未开启:
检查验证码图片是否能正常显示
GD 库没问题,但验证码图片本身路径或权限有问题。
- 检查方法:
- 登录页面,找到验证码图片的位置。
- 右键点击验证码图片,选择“在新标签页中打开”。
- 观察新打开的标签页:
- 如果显示一张正常的图片:说明图片生成和路径是正常的,问题可能出在 session 或浏览器缓存上(见第4点)。
- 如果显示一个 "X" 图标或空白:说明图片无法加载,检查图片路径是否正确,或者服务器上是否有权限问题。
检查 /data 目录权限
DedeCMS 的很多缓存数据,包括验证码的 session 信息,都存储在 /data 目录下,如果这个目录的权限不正确,服务器无法读写,验证码就会失效。
-
检查方法:
- 通过 FTP 或文件管理器连接到你的服务器。
- 找到网站根目录下的
/data文件夹。 - 查看其权限,通常需要设置为 755 或 777(777权限较高,有安全风险,建议先用755测试)。
-
解决方法:
- 在 FTP 客户端或文件管理器中,右键点击
/data目录,修改其权限为 755。 - 如果还不行,可以尝试 777,但记得改完后测试成功,最好改回 755。
- 在 FTP 客户端或文件管理器中,右键点击
清除浏览器缓存和 Cookie
浏览器缓存的旧文件或过期的 Cookie 会导致登录验证异常。
- 解决方法:
- 清除浏览器缓存和 Cookie。
- 关闭当前浏览器标签页,重新打开一个新的标签页,再尝试登录。
- 如果可以,尝试使用无痕模式或隐私模式进行登录,这样可以排除插件和缓存的干扰。
检查 session 存储目录权限
验证码的验证依赖于 PHP Session,Session 的临时目录没有写入权限,验证码也无法正常工作。
-
检查方法:
- 在
phpinfo.php页面搜索 "Session"。 - 查看 "Session Save Path" 的值,这就是 Session 存储的路径(
/var/lib/php/sessions)。 - 检查这个目录的权限,确保 Web 服务器用户(如
www-data,apache,nginx)有读写权限,通常权限也应为 755 或 777。
- 在
-
解决方法:
通过 SSH 或 FTP 命令行修改该目录的权限。
检查验证码相关文件是否被篡改或损坏
极少数情况下,DedeCMS 自带的验证码生成文件可能被病毒、黑客攻击或升级不当而损坏。
-
检查文件:
/include/vdimgck.php(验证码生成核心文件)/templets/login.htm(登录页面模板,里面调用了验证码)
-
解决方法:
- 从一个干净、完整的 DedeCMS 安装包中,下载这两个文件,覆盖到你网站上的对应文件,注意:覆盖前最好先备份原文件。
暂时关闭验证码(临时解决方案)
如果你急着登录后台,并且以上方法都无效,可以临时关闭登录验证码。
-
操作步骤:
- 通过 FTP 登录,找到
/include/loginsta.php文件。 - 下载这个文件到本地。
- 用文本编辑器打开,找到这一行:
if(empty($vdcode) || $vdcode!=$scode) { ShowMsg('验证码错误!', '-1'); exit(); } - 将其注释掉(在行首加上 )或者删除这几行代码。
- 保存文件,并上传覆盖服务器上的原文件。
- 通过 FTP 登录,找到
-
重要提示:
- 这会降低网站安全性,任何人都可以尝试暴力破解你的后台密码。
- 请务必在登录成功后,第一时间恢复这个文件,或者按照下面的方法在后台关闭。
-
在后台关闭(推荐):
- 登录后台后,进入【系统】->【系统基本参数】。
- 在左侧选择【登录安全设置】。
- 找到“后台登录验证码”选项,将其设置为“否”。
- 点击【保存】。
- 同样,这也会降低安全性,处理完紧急事务后,记得把它改回“是”。
总结与排查顺序建议
遇到这个问题,建议按以下顺序排查,效率最高:
- 先确认:你输入的验证码是否区分大小写,是否看错字符了?
- 刷新重试:刷新页面,获取新验证码,重新输入。
- 查权限:检查
/data目录权限是否为 755,这是最常见的原因之一。 - 查GD库:通过
phpinfo.php确认 GD 库是否开启,虚拟主机用户请直接联系服务商。 - 清缓存:清除浏览器缓存和 Cookie,用无痕模式重试。
- 查文件:检查验证码图片是否能正常打开,如果不行,检查
vdimgck.php文件。 - 最后手段:如果还是不行,暂时关闭验证码,先登录进去处理问题,之后再恢复。
希望这些步骤能帮助你解决问题!
