PHP验证码SESSION验证码图片不同步
今天在做php登录验证的时候带验证码的,nc的在页面输出了下验证码的session,于是乎出现了戏剧性的一幕,session验证码和图片上的验证码不一样?那用户岂不是登陆不上了?但是奇怪的是用户输入图片中的验证码还能够登陆成功,这就很奇怪了,验证码匹配不上怎么会登录成功呢?于是我看了下代码,代码如下
if (empty($login_captcha)) {
$captcha_error = "验证码不能为空";
$TF = false;
}else {
if (strcasecmp($login_captcha, $_SESSION['captcha']) != 0) {
$captcha_error = "验证码错误";
$TF = false;
}
}
if ($TF) {
if ($login_username == $username && $login_password == $password) {//匹配成功即为登录成功
//匹配成功将用户名密码赋值给session
$_SESSION['username'] = $login_username;
$_SESSION['password'] = $login_password;
if (isset($rememberMe)) {//如果用户勾选了记住密码则设置cookie
setcookie("username", $_SESSION['username'], $t);
setcookie("password", $_SESSION['password'], $t);
}
$login_TF = true;
$_SESSION['login_TF'] = $login_TF;//传递登录状态
header("refresh:1;url=admin.php");//跳转页面
} else {
$username_error = "用户名或密码错误";
$password_error = "用户名或密码错误";
}
}
可以看到代码是没有逻辑错误的那为什么会出现可以登录问题呢?先说一下验证码session和图片上验证码不同步的问题,首先php运行是是逐行运行的这就导致你这个输出的session是上一次的,然后下面图片调用验证码的时候就会重新设置验证码session。
那么为什么还可以登陆呢?因为form表单点击提交时,页面会刷新,这样的话验证码session又变成了和输入的验证码相同了,所以就判断验证码输入正确,就可以登录了,即每点击一次登录验证码session会变成用户已经输入的验证码。既然弄明白了这个问题那么有没有解决方法呢?
办法是有的但是我还没学到哈哈哈哈。自行百度,不百度也可以将就着用。
