这里是我的登录验证页(就是表单提交数据到的那个页面)的代码
<?php
if($_SERVER['HTTP_REFERER']==NULL)
{
Header("location:protect.php");
}/*验证访问的来源,可是这样写并没有起任何作用*/
session_start();
require('mysql.php');
$username=$_POST['username'];
$password=$_POST['password'];
$_SESSION['username']=$username;
$query_user="select * from user where username = '$username' and password = '$password'";
$query_username="select * from user where username = '$username'";
$query = mysql_query($query_user);
$query1 = mysql_query($query_username);
@$result = mysql_fetch_array($query);
$result1 = mysql_fetch_array($query1);  
if ($result['username']==$username && $result['password']==$password)  
  {   
    echo "登录成功";
$_SESSION['name']=$result['name'];
$_SESSION['logined']=ture;   
Header("Location: logined.php");
  }  
elseif($result1['username']==$username)
{
echo"登录失败";
Header("Location:loginfall2.php"); /*提示密码错误*/
}
 
else 
{  
echo "登录失败"; 
Header("Location:loginfall1.php");  /*提示用户不存在*/
}
?>  
用上面这段代码正常提交表单什么的功能很正常,可是如果直接从浏览器输入这个页面的地址仍然会跳到登录之后的logined.php上,用迅雷下载这个连接也会返回logined.php的代码。不仅判断来源的语句没怎么起作用,就连需要验证帐号密码的句子也没了作用,纯新手,实在不懂,求指教。
后来没办法试着把代码结构改成了这样:if($_SERVER['HTTP_REFERER']==NULL)
{
Header("location:protect.php");
}
else{
/*上面那段验证代码*/
}结果当从浏览器直接访问这个页面的时候成功的跳转到了protect.php,但是用迅雷下载这个页面居然又跳过了验证,返回了logined.php的代码,$username和$password都没有取到值为什么能跳过验证呢?

解决方案 »

  1.   

    我又改了一下这段程序:
    if($_SERVER['HTTP_REFERER']==NULL)
    {
    Header("location:protect.php");
    }
    elseif($_POST['username']!="")
    {
    //判断用户密码
    }
    else
    {
    Header("location:protect.php");
    }这次迅雷下载到的也不在是跳过验证的logined.php而是预想的protect.php了,但是我还是很想知道,为什么会出现像这样帐号密码均为空但还是经过了sql的验证,不太懂sql,但是mysql_fetch_array()这函数就是在满足条件的结果里拿出一个记录吧?为空不应该跳过验证才对啊。
      

  2.   

    基本上
    向第三方提交登录都需要记录并应用cookies
    你改用curl吧