我有一个简单的验证码,当register_global被禁用时效果很好,根据PHP手册Using Register Globals
这是正确的但有时我会移动到许多主机,默认情况下它们会启用注册全局,因此我的验证码会停止工作,并且即使输入正确也始终提供错误的验证码。
我的问题
如果启用register_global以及禁用了?
,它为什么不起作用?代码
captcha.php
<?PHP
session_start();
$digits_num=5;
$x_pos=25;
$y_pos=6;
$font_size=5;
function random_num($n){
$start_num = "1".str_repeat("0", $n-1);;
$end_num = str_repeat("9", $n);
return rand($start_num, $end_num);
}
$text = random_num($digits_num);
$_SESSION["captcha_num"] = md5($text);
$captcha = imagecreatefrompng("./images/captcha.png");
$font_color['black']=imagecolorallocate($captcha, 0, 0, 0);
$font_color['white']=imagecolorallocate($captcha, 80, 73, 20);
imagestring($captcha, $font_size, $x_pos, $y_pos, $text, $font_color['white']);
header("Content-type: image/png");
imagepng($captcha);
?>
表格
<form name="frm" method="post" action="add.php">
<img src="captcha.php">
<input type="text" name="captcha_num" id="captcha_num" >
<input type="submit" name="submit" id="submit" value="submit">
</form>
add.php
<?PHP
session_start();
if(md5($_POST['captcha_num']) != $_SESSION['captcha_num']){
echo "Wrong captcha";
}else{
echo "Good Pass it";
}
?>
答案 0 :(得分:4)
从您提到的手册页:
自PHP 5.3.0开始,此功能已被弃用,自PHP 5.4.0起已被删除 (...)
也许PHP中最具争议的变化是PHP指令register_globals的默认值在PHP»4.2.0中从ON变为OFF。
换句话说:将其关闭。
ini_set
将此代码置于代码之上(如果有代码,则放在引导程序文件中)
ini_set('register_globals', 'Off')
在您网站的根目录中创建一个.htaccess
文件并将此代码添加到其中:
php_flag register_globals Off
如果您使用不好的技术,不要问自己为什么脚本是错的,请问自己如何关闭/避免使用不良技术。