头位置PHP问题


header location php issues

这是我的代码,它在localhost上工作并将我重定向到登录页面:

require("common.php"); 
unset($_SESSION['user']); 
 session_destroy(); 
header("Location: login.php"); 

但是当我把它上传到我的web服务器时,头没有发送。用户登录时没有重定向到我的登录页面。但是会话已经开始了。

代码如下:

require("common.php"); 

$submitted_username = ''; 

if(!empty($_POST)) 
{ 
    $query = " 
        SELECT 
            id, 
            username, 
            password, 
            salt, 
            email 
        FROM users 
        WHERE 
            username = :username 
    "; 

    $query_params = array( 
        ':username' => $_POST['username'] 
    ); 
    try 
    { 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to run query: " . $ex->getMessage()); 
    } 

    $login_ok = false; 

    $row = $stmt->fetch(); 
    if($row) 
    { 
        $check_password = hash('sha256', $_POST['password'] . $row['salt']); 
        for($round = 0; $round < 65536; $round++) 
        { 
            $check_password = hash('sha256', $check_password . $row['salt']); 
        } 
    if($check_password === $row['password'])
        { 
            $login_ok = true; 
        } 
      if($login_ok) 
    { 
        unset($row['salt']); 
        unset($row['password']); 

        $_SESSION['user'] = $row; 
     header("Location:form_menu.php"); 
    } 
    else 
    { 
        echo("<font color=red>Login Failed. Icorrect Password </font>"); 

        $submitted_username = htmlentities($_POST['username'], ENT_QUOTES, 'UTF-8'); 
    }
    }
}

如何解决这个问题?我的网络服务器有问题吗?

你正在要求session_destroy(),但你没有session_start()在你的代码,除非它在你的common.php。我总是确保我退出;

那么试试这个,修改这个:

<?php 
require("common.php"); 
unset($_SESSION['user']); 
 session_destroy(); 
header("Location: login.php"); 

?>

:

<?php 
 session_start();
   require("common.php"); 
    unset($_SESSION['user']); 
    session_destroy(); 
    header("Location: login.php"); 
    exit;

?>

然后将它添加到其他代码的顶部,就在开头之后

session_start();

在页面顶部添加

     ob_start();

和页面底部添加

    ob_end_flush();

我希望它能起作用。

PHP中的header总是在任何输出出现之前运行,所以打开输出缓冲