php登录脚本没有';t重定向


php login script doesn't redirect

我写了一个脚本,可以正确读取用户和密码数据,以登录到保留的网页。问题是,当你按下登录按钮时,它不会重定向到target.php(保留)页面。该表单位于一个名为login.php的文件中。它读取并连接到数据库,但停留在这个登录页面上:

<?php

session_start();

function loginform(){
    echo "<form action='' method='POST'>
          Username: <input type = 'text' name='username'>
          Password: <input type = 'text' name='password'>
          <input type = 'submit' name='login' value='Login'>
          </form>
    ";
}
function logoutform(){
    echo "<form action='' method='POST'>
          <input type = 'submit' name='logout' value='Logout'>
          </form>
    ";
}
function login($username, $password){
    $pass = md5($password);
    $con= mysqli(whateverwebsite.com, 'Nameofthetable', 'hashedmd5password') or die (mysql_error());
    mysql_select_db('whateverdb', $con) or die (mysql_error());
    $result = mysql_query(" SELECT * FROM user WHERE username='$username' AND password='$pass' ") or die (mysql_error);
    $count= mysql_num_rows($result);
    if($count==1) {
        $_SESSION['login']=$username;
        header('Location:target.php'); /* this does not work */
    }
    else {
        header('Location:index.php');   /* this does not work */
        echo "Wrong login";
    }
}
function logout(){
    session_destroy();
}
if (isset($_SESSION['login'])) {
    echo "You've logged in";
    logoutform();
}
else{
    echo "Enter with Username and password.";
    loginform();
}
if ($_POST['login']) {
    echo "logging in..."; /* this text "logging in" remains on the screen, instead of going to target.php */
    login($_POST['username'], $_POST['password']);
}
elseif($_POST['logout']){
    echo "Logging out";
    logout();
}
?> 

此外,在target.php页面的html之前,还有这个

<?php
 session_start();
 echo "Reserved area<br>";
 if (!isset($_SESSION['login'])) {
    exit("you must login <a href='../login.php'>Login<a>");
 }
 else {
    echo "Do the <a href='../login.php'>Logout</a>";
 }
?>

这样的东西一直对我有效:
此修改在您的login函数中。如果它有效,您可以以类似的方式修改else部分。

if( $count == 1 )
{
    $_SESSION['login'] = $username;
    echo
'<!DOCTYPE html>
<html>
    <head>
        <title>Your website title</title>
        <meta http-equiv="refresh" content="3;url=target.php">
        <meta charset="UTF-8">
    </head>
    <body>
        Logging in . Please wait ...
    </body>
</html>';
}

在使用header()之前,您不应该回显任何内容。

因此,首先检查$_POST['login']login()

之前不要使用echo

另一种方法:

<?php
    echo "<script type='text/javascript'>window.location='page.php';</script>";
    //or
    echo "<meta http-equiv='refresh' content='0;url=page.php' />";
?>

您可以使用header()函数发送一个新的HTTP标头,但它必须在任何HTML或文本之前发送到浏览器(例如,在声明之前)。

备选方案:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);
    exit();
}
Redirect('http://www.google.com/', false);

更新:如果这不起作用,使用这个:

echo "<meta http-equiv='refresh' content='0;url=index.php' />";

而不是使用头

我认为这个函数可能是罪魁祸首。它没有显示任何内容,为什么它没有被调用?

if (isset($_SESSION['login'])) {
    echo "You've logged in";
    logoutform();
}

//在此处尝试

 if($count==1) {
        $_SESSION['login']=$username;
        header('Location:target.php'); /* this will work now*/
        //TRY
         exit(); 
    }

注意:mysql_*不推荐使用mysqli_您的代码极易受到攻击

逻辑缺陷-您的代码高度易受攻击

  $result = mysql_query(" SELECT * FROM user WHERE username='$username' AND    password='$pass' ") or die (mysql_error);
  $count= mysql_num_rows($result);

$username="A%"像某些事情一样,让$count>1并登录到此是很容易的