1

ローカルホストで動作し、ログインページにリダイレクトする私のコードは次のとおりです。

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'); 
    }

    }
}

この問題を解決するにはどうすればよいですか? Web サーバーに問題はありますか?

4

2 に答える 2

1

session_destroy()を要求していますが、common.phpにない限り、コードにsession_start()がありません。そして、私は常に私が終了することを確認します。ヘッダーの後( "場所:xxx.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();
于 2012-12-21T06:04:46.873 に答える
1

ページの上部に追加

     ob_start();

そして、ページの下部に追加

    ob_end_flush();

うまくいくことを願っています。

PHPのheaderは常に出力が発生する前に実行されるため、出力バッファリングをオンにします。

于 2012-12-21T06:14:45.773 に答える