PHP验证码使用纯文本

时间:2012-04-13 20:15:18

标签: php captcha

这是我第一次在这里发帖,因为这也是我第一次决定从头开始为自己建立一个网站。我正在创建一个带有基本验证码脚本的联系页面。由于您可能认为疯狂的原因,我想将验证码显示为文本。我决定反对png,因为(反)别名是非常糟糕的透明背景,我不认为我的网站会引起太多不必要的注意。

这是我的captcha.php

<?php 

session_start();

$characters_on_image = 4;

$possible_letters = '0123456789';

$code = '';

$i = 0;
while ($i < $characters_on_image) { 
$code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
$i++;
}

echo $code;


header('Content-Type: text/plain');

$_SESSION['code'] = $code;
?>

我遇到的问题是,如果我使用<?php print $_SESSION['code']; ?>,它将打印以前的代码。我的编程非常复杂,我想知道是否有办法在<label>标记中显示当前生成的代码?

2 个答案:

答案 0 :(得分:2)

而不是纯文本考虑使用FIGlet字体:

Font: big
 __  __             
|  \/  |            
| \  / | ___   ___  
| |\/| |/ _ \ / _ \ 
| |  | | (_) | (_) |
|_|  |_|\___/ \___/ 

这是一个用来做它的PHP库

http://bolknote.ru/files/figlet/

不幸的是,网页是俄语的,因此here是Google翻译过的(请注意,翻译人员已经破坏了代码示例的布局,因此您可能需要返回原始版本):

答案 1 :(得分:2)

您还可以输出看起来像普通(但不是)的Unicode字符,并要求用户重复这些字符。西里尔字母有许多看起来很熟悉的拉丁文字符,但编码方式不同:

А vs A    В vs B    Е vs E    Ѕ vs S    І vs I    К vs K
М vs M    Н vs H    О vs O    Р vs P    Т vs T    Х vs X

这很容易破解,但易于实施且易于用户解决。

(关于你的代码示例:跳过整个会话事件,只需从captcha.php文件中回显CAPTCHA。确保包含解决方案的哈希值。)