这里是我的登录验证页(就是表单提交数据到的那个页面)的代码
<?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都没有取到值为什么能跳过验证呢?
<?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都没有取到值为什么能跳过验证呢?
解决方案 »
- php 新手求救
- 推荐:学习PHP的快捷途径——PHP精讲视频!
- 新手询问一个安装程序问题
- 有一个点评类网站(PHP+MYSQL)想对商家做二级域名服务,该怎么做?有愿意做的吗?
- 插入mysql数据库的时候
- 装过Discuz6.0.0的兄弟姐妹们帮帮忙。安装时出错且无任何提示。
- 用过pear的请过来帮帮忙
- 求一个留言板。要求:管理员能通过管理密码看别人的留言,并可以回复。留言人可以通过留言时的名字查看管理员的回复。。
- 文件上传
- Apache2+PHP+Zend+phpMyAdmin的整合安装包刚做好,需要一个空间存放,谁能提供?
- 关于.htaccess设置404页面的问题
- 求助啊 用imgjpeg输出的图片前后不一致
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()这函数就是在满足条件的结果里拿出一个记录吧?为空不应该跳过验证才对啊。
向第三方提交登录都需要记录并应用cookies
你改用curl吧