dede验证码如何正确调用?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文

DedeCMS 的验证码主要用于登录、发布内容、评论等需要用户身份验证的场景,调用方式主要分为两种:

  1. 直接在模板文件中调用标签:最简单直接的方法,适用于登录、评论等标准功能。
  2. 在自定义表单或页面中手动调用:更灵活的方法,当你创建自己的表单页面时需要使用。

在标准功能模板中直接调用标签

这是最常见的情况,比如修改登录页面的验证码。

步骤 1:找到并打开模板文件

你需要修改的模板文件通常位于 /templets/ 目录下。

  • 登录页面/templets/default/login.htm
  • 发布文章页面/templets/default/article_add.htm
  • 评论页面/templets/default/feedback.htm

以登录页面 login.htm 为例,用文本编辑器(如 VS Code, Sublime Text, Notepad++)打开它。

步骤 2:在表单中插入验证码标签

在登录表单 <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" width="60" height="24" style="cursor:pointer" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" title="看不清?点击更换" />
    </div>
</div>

代码解析:

  • <input type="text" name="vdcode" ... />:这是用户输入验证码的输入框。name="vdcode" 是固定的,后台处理程序会根据这个 name 值来获取用户输入。
  • <img src="..." />:这是显示验证码图片的标签。
    • src="{dede:global.cfg_cmspath/}/include/vdimgck.php":这是验证码生成程序的路径。{dede:global.cfg_cmspath/} 是 DedeCMS 的全局标签,会自动替换成你的网站根目录,这样能保证路径正确。
  • onclick="this.src='...?'+Math.random();":这是实现“点击刷新”功能的关键,当用户点击图片时,会给图片的 src 地址后面加上一个随机数(?Math.random()),这样浏览器就会认为这是一个新的图片地址,从而重新请求并刷新验证码。

步骤 3:确保后台功能开启

DedeCMS 的很多功能默认是开启验证码的,如果验证码不显示,可以检查一下后台设置。

  1. 登录 DedeCMS 后台。
  2. 进入 “系统” -> “系统基本参数” -> “核心设置”
  3. 找到 “是否开启验证码” 选项,确保它被设置为“是”。
  4. 对于特定功能,如评论,可以进入 “评论” -> “评论设置”,检查是否开启了验证码。

在自定义表单或页面中手动调用

如果你创建了一个自定义的页面或表单(例如一个“联系我们”表单),并希望加入验证码,你需要手动完成所有步骤。

步骤 1:在模板文件中添加验证码输入框

和第一步一样,在你的自定义表单模板中,添加 HTML 代码:

<!-- 在表单内部添加 -->
<p>
    <label>验证码:</label>
    <input type="text" name="myvdcode" id="myvdcode" style="width:50px;" />
    <img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" width="60" height="24" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" />
</p>

注意:这里的 name="myvdcode" 可以自定义,但你需要确保在处理表单的 PHP 代码中也使用这个相同的 name。

步骤 2:创建处理表单的 PHP 文件

你需要一个 PHP 文件来接收表单数据并进行验证,假设你的表单 action 指向 myform.php

myform.php 文件示例:

<?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/membermodel.class.php";
// 1. 接收表单数据
$vdcode = isset($_POST['myvdcode']) ? trim($_POST['myvdcode']) : '';
// 2. 验证码校验
// 检查验证码是否正确
if (empty($vdcode) || strtolower($vdcode) != strtolower($_SESSION['vdcode'])) {
    // 验证失败,提示并返回
    ShowMsg('验证码错误!', '-1');
    exit();
}
// 3. 其他业务逻辑(保存数据到数据库)
// ... 你的代码 ...
// 4. 验证成功,提示成功信息
ShowMsg('提交成功!', 'success.html');
exit();
?>

代码解析:

  • require_once (dirname(__FILE__) . "/include/common.inc.php");:引入 DedeCMS 的核心文件,这是必须的,可以获得 $_SESSION 等变量。
  • $vdcode = ...:获取表单中 name="myvdcode" 的值。
  • if (empty($vdcode) || strtolower($vdcode) != strtolower($_SESSION['vdcode'])):这是验证码校验的核心逻辑。
    • strtolower():将用户输入和 session 中的验证码都转换为小写,进行不区分大小写的比较。
    • $_SESSION['vdcode']:DedeCMS 的验证码生成程序 vdimgck.php 会将正确的验证码码值存入这个 Session 变量中,我们只需要在这里读取它并与用户输入的进行比较即可。
  • ShowMsg(...):DedeCMS 提供的一个非常方便的页面跳转和提示函数。

常见问题与解决方法

  1. 验证码图片不显示(显示一个红叉)

    • 原因:通常是路径问题。{dede:global.cfg_cmspath/} 没有正确解析,或者 vdimgck.php 文件丢失/损坏。
    • 解决
      • 检查 include/vdimgck.php 文件是否存在。
      • 尝试将路径写死,例如将 src 改为 /include/vdimgck.php(如果你的网站根目录是 )。
      • 检查服务器是否支持 GD 库,验证码图片需要 GD 库来生成,可以在 phpinfo() 中查看。
  2. 验证码输入正确却提示“验证码错误”

    • 原因
      • Session 问题,Session 未开启或在不同页面间无法共享。
      • 浏览器缓存问题。
    • 解决
      • 确保网站的 php.inisession.auto_startOn,或者在 common.inc.php 中正确初始化了 Session。
      • 清除浏览器缓存和 Cookie 后再试。
      • 检查你的代码逻辑,确保在验证时 $_SESSION['vdcode'] 变量是存在的。
  3. 验证码样式太丑,想自定义

    • 原因vdimgck.php 是一个 PHP 类文件,直接在里面修改代码比较麻烦。
    • 解决:你可以创建自己的验证码生成类,或者在网上找一些更美观的验证码类,替换掉 DedeCMS 默认的 /include/vdimgck.php 文件,替换后,模板中的调用代码 <img src="..."> 不需要改变。

希望这份详细的教程能帮助你成功地在 DedeCMS 中调用验证码!

-- 展开阅读全文 --
头像
织梦搜索页模板标题如何自定义?
« 上一篇 今天
C语言程序语句以什么结束?
下一篇 » 今天

相关文章

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

目录[+]