dede留言验证码如何开启或解决失效问题?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文
  1. 问题: 留言板没有验证码,导致垃圾广告留言泛滥。
  2. 问题: 留言验证码不显示,或者显示乱码。

下面我将针对这两种情况,提供详细的解决方案。

dede 留言验证码
(图片来源网络,侵删)

为留言板添加验证码(如果原本没有)

如果你的 DedeCMS 版本比较旧,或者当初安装时没有启用验证码功能,你需要手动开启并配置它,这通常涉及修改几个核心文件。

第1步:开启后台验证码功能

这是最基本的一步,确保系统允许在留言处使用验证码。

  1. 登录你的 DedeCMS 后台。
  2. 进入 【系统】 -> 【系统基本参数】
  3. 在左侧菜单中找到 【互动设置】
  4. 找到 “是否启用验证码” 这个选项,将其设置为 “是”
  5. 在下方,找到 “留言验证码” 选项,同样设置为 “是”
  6. 点击 【确定】 保存设置。

第2步:修改前台模板文件 (guestbook.htm)

你需要在前台留言板模板中,加入显示验证码输入框和图片的 HTML 代码。

  1. 通过 FTP 或文件管理器,进入你的 DedeCMS 安装目录。
  2. 找到模板文件路径,通常是:/templets/default/guestbook.htm
  3. 用代码编辑器打开 guestbook.htm 文件。
  4. 找到留言表单 <form ...> 内部,通常在 用户名联系方式 等输入框的后面,添加如下代码:
<!-- 验证码部分 -->
<div class="form-group">
    <label for="vdcode">验证码:</label>
    <div class="input-group">
        <input type="text" name="vdcode" id="vdcode" class="form-control" style="width:120px;" />
        <img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" alt="看不清?点击换一张" style="cursor: pointer; height: 32px;" title="看不清?点击换一张" />
    </div>
</div>
<!-- 验证码部分结束 -->

代码解释:

dede 留言验证码
(图片来源网络,侵删)
  • <input name="vdcode" ...>:这是用于输入验证码的文本框,name 属性 vdcode 是固定的,DedeCMS 后端会识别这个名字。
  • <img src="...">:这是用来显示验证码图片的标签。
    • src 指向了 DedeCMS 生成验证码的程序 vdimgck.php
    • onclick="this.src='...?'+Math.random();":这段 JavaScript 代码实现了“点击图片刷新验证码”的功能,非常方便用户。
  1. 保存并上传 guestbook.htm 文件到服务器。

第3步:修改处理留言的程序文件 (guestbook.php)

这个文件负责接收和处理前台的留言数据,你需要在这里加入验证码的校验逻辑。

  1. 找到并打开 /plus/guestbook.php 文件。
  2. 在文件的开头部分,找到处理表单提交的代码段(通常在 if($dopost=='send') 条件判断内)。
  3. 在执行数据库插入操作(类似 $dsql->ExecuteNoneQuery($query);之前,加入以下验证码校验代码:
// 在 $dopost=='send' 的逻辑里,插入以下代码
// 验证码校验开始
if(strtolower($vdcode) != strtolower($_SESSION['vdcode']))
{
    ShowMsg('验证码错误!', '-1');
    exit();
}
// 验证码校验结束

代码解释:

  • $vdcode:这是从前台表单提交过来的验证码输入值。
  • $_SESSION['vdcode']:这是服务器端在生成验证码图片时,保存在 Session 中的正确验证码。
  • strtolower():将两者都转换为小写进行比较,以避免大小写敏感问题。
  • 如果验证失败,调用 ShowMsg() 函数提示用户“验证码错误”,并终止脚本执行。
  1. 保存并上传 guestbook.php 文件。

完成以上三步后,你的留言板就应该成功显示并校验验证码了。


留言验证码不显示或显示乱码

这种情况通常是由于服务器环境配置或文件权限问题引起的。

dede 留言验证码
(图片来源网络,侵删)

常见原因及解决方案

Session 未启用或路径不可写

验证码依赖于 Session 来存储信息,Session 功能未开启,或者 Session 文件存储的目录没有写入权限,验证码就无法生成。

解决方案:

  • 检查 PHP 配置 (php.ini):
    • 确保 session.save_path 指向一个有效的、有写入权限的目录(/tmp)。
    • 确保 session.auto_start = 0(这是默认值,DedeCMS 会自行启动 Session)。
  • 检查目录权限:
    • 给 DedeCMS 根目录下的 data 文件夹(Session 可能会在这里创建)以及 sessions 文件夹(如果存在)赋予 755777 的写入权限。
    • 在 Linux 服务器上,可以通过 SSH 执行命令:chmod -R 755 /path/to/your/dede/data

GD 库未安装或版本过低

DedeCMS 的验证码是使用 PHP 的 GD 库动态生成的图片,如果服务器没有安装 GD 库,或者版本过低,就无法生成图片。

解决方案:

  • 联系你的主机商: 确认服务器是否安装了 GD 库。
  • 自行检查: 在你的网站根目录下创建一个 info.php 文件,内容为 <?php phpinfo(); ?>,然后在浏览器中访问它,在输出结果中搜索 "GD",如果看到 "GD Support" => "enabled",则表示 GD 库已启用。

文件编码问题(乱码)

guestbook.htm 模板文件的编码是 UTF-8,并且保存为了 UTF-8 with BOM 格式,那么输出的 HTML 代码会在最前面多出几个不可见的字符,这会破坏 HTTP 头,导致 Session 和图片无法正确加载,从而显示乱码或空白。

解决方案:

  • 使用专业的代码编辑器(如 VS Code, Sublime Text, Notepad++)重新打开 guestbook.htm 文件。
  • 将文件编码从 UTF-8 with BOM 转换为 UTF-8 (无 BOM)ANSI/GBK(如果你的网站是 GBK 编码)。
  • 保存后重新上传到服务器。

文件路径错误

如果修改了网站目录,或者 include/vdimgck.php 文件丢失、路径错误,验证码图片也无法显示。

解决方案:

  • 检查文件是否存在: 确认 /include/vdimgck.php 文件是否存在于你的服务器上。
  • 检查路径: 确保模板中引用的 {dede:global.cfg_cmspath/} 变量是正确的,它应该指向你的 DedeCMS 安装根目录。

服务器缓存或浏览器缓存

旧的缓存文件也会导致问题。

解决方案:

  • 清除浏览器缓存,或者按 Ctrl + F5 强制刷新页面。
  • 检查服务器是否开启了全站缓存,如果开启了,尝试清除缓存。

总结排查流程

当遇到验证码问题时,建议按以下顺序进行排查:

  1. 先看后台:确认【系统基本参数】->【互动设置】里,验证码是否已开启。
  2. 再查模板:检查 guestbook.htm 中是否正确添加了验证码的 HTML 代码。
  3. 然后看代码:检查 guestbook.php 中是否加入了校验逻辑。
  4. 最后查环境
    • 刷新浏览器,清除缓存。
    • 检查文件编码,尤其是 guestbook.htm 是否为 UTF-8 with BOM。
    • 检查目录权限,确保 data 等目录可写。
    • 联系主机商,确认 GD 库和 Session 功能是否正常。

按照这个思路,绝大多数 DedeCMS 留言验证码问题都可以得到解决。

-- 展开阅读全文 --
头像
织梦新手如何快速掌握建站教程?
« 上一篇 04-05
dede简略标题字数限制是多少?
下一篇 » 04-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]