问题描述
- PHP+MYSQL,我登陆之后,点击“注销”,为何会显示“非法访问”?
-
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <h1>欢迎来到XXX网</h1> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <span>邮箱:<input type="text" name="user_email"></span> <span>密码:<input type="text" name="user_pass"></span> <span> <input type="submit" name ='submit' value="登陆"></span> <input type="button" onClick="location.href='register.php'" value="注册" /> </form> <?php //开始登录 if(!isset($_POST['submit'])){exit('非法访问!');} $user_email = htmlspecialchars($_POST['user_email']); $user_pass = htmlspecialchars($_POST['user_pass']); //包含数据库连接文件 include('conn.php'); //检测用户名及密码是否正确 $check_query = mysql_query("select user_id,user_nickname from users where user_email='$user_email' and user_pass='$user_pass' limit 1"); if($result = mysql_fetch_array($check_query)) { //登录成功 @ session_start(); $_SESSION['user_id'] = $result['user_id']; $_SESSION['user_email'] = $user_email; echo $result['user_nickname'].',欢迎你!---<a href="my.php">用户中心</a> '; echo '<a href="index.php?action=logout">注销</a><br />'; exit; } //登陆失败 else {exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');} //注销登录 if ( $_GET['action'] == "logout" && isset($_SESSION['user_id']) ) { echo '注销成功!点击此处 <a href="login.html">登录</a>'; unset($_SESSION['user_id']); unset($_SESSION['user_email']); exit; } ?> </body> </html>
解决方案
if(!isset($_POST['submit'])){exit('非法访问!');}
你不是post访问这个页面并且没有传递sumit参数,上面的代码就是true当然会自行die代码
判断代码公用的时候注意要增加op参数什么的,判断是相关的操作在判断值是否存在什么的,而不是直接判断值,要不就出现你这种错误了
解决方案二:
if(isset($_POST['submit'])){
//共用一个页面就是把代码放到这里了:
}
解决方案三:
谢谢各位朋友解答,问题解决了,根因在这里。
1、我是参考这位作者的代码 http://blog.csdn.net/sysprogram/article/details/21107041
因为原作者的代码中,登陆页面login.html与login.php是两个文件,所以作者使用这段代码
if(!isset($_POST['submit'])){ exit('非法访问!');
来判断用户是不是点击submit过来的?如果不是点击submit过来,而是直接输入网址过来的话,就会提示“非法访问”。
2、而我submit按钮、登陆、注销,都是在同一个php文件中,所以当点击“注销”时,肯定没有submit产生,所以会提示“非法访问。
3、解决方法是,修改这个判断规则就可以了。如下:
<?php
//开始登录
//if(!isset($_POST['submit'])){exit('非法访问!');}
if(isset($_POST['submit']))
{
$user_email = htmlspecialchars($_POST['user_email']);
$user_pass = htmlspecialchars($_POST['user_pass']);
//包含数据库连接文件
include('conn.php');
//检测用户名及密码是否正确
$check_query = mysql_query("select user_id,user_nickname from users where user_email='$user_email' and user_pass='$user_pass' limit 1");
if($result = mysql_fetch_array($check_query))
{
//登录成功
@ session_start();
$_SESSION['user_id'] = $result['user_id'];
$_SESSION['user_email'] = $user_email;
echo $result['user_nickname'].',欢迎你!---<a href="my.php">用户中心</a> ';
echo '<a href="index.php?action=logout">注销</a><br />';
exit;
} //登陆失败
else {exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');}
}
//注销登录
if ( $_GET['action'] == "logout" )
{
echo '注销成功!点击此处 <a href="index.php">登录</a>';
unset($_SESSION['user_id']);
unset($_SESSION['user_email']);
exit;
}
?>
解决方案四:
你可以先将_SESSION['user_id']和_SESSION['user_email']传递的值打印出来,然后看看与数据库的是否一致,如果一直的话,你应该进行格式转换下,譬如剔除空字符等操作,在试试看。
时间: 2025-01-21 12:53:03