-3

重複の可能性:
PHPによってすでに送信されているヘッダー

ユーザーログインスクリプトを実行した後にリダイレクトしようとすると、このエラーが発生します。

次の行でヘッダーデータを変更しようとします。

header("Refresh: 2; url=index.php");

これは完全なlogin.phpスクリプトです。

<?php 
session_start();
require_once('init.php');

$username = trim($_POST['username']);
// create a new object
$login = new Auth($_POST, $dbh);

    if($login->validateLogin()){

        $_SESSION['loggedin'] = true;
        $_SESSION['username'] = $username;
        $list = $login->getUserInfo();
        $_SESSION['id'] = $list['id'];
        $_SESSION['thumb'] = $list['img_thumb'];

        echo '<div class="content">';
        echo '<h1>Thank you for logging in '.$username.'. Redirecting...</h1>';
        echo '</div>';
        header("Refresh: 2; url=index.php");

    }else{

        echo '<div class="content">';
        echo '<h1>Sorry but we didn\'t recognise those login details, please try again.</h1>';
        echo '</div>';

    }



require_once('inc/footer.inc.php');
?>

init.phpファイルは、html5 doctype、metaタグなどを含むheader.phpを呼び出します。

ログイン後にユーザーをインデックスページにリダイレクトし、通常どおりヘッダー情報を送信するにはどうすればよいですか?

4

3 に答える 3

3

PHPドキュメントから。

header()通常のHTMLタグ、ファイル内の空白行、またはPHPのいずれかによって、実際の出力を送信する前に呼び出す必要があることに注意してください。

数秒後にページをリダイレクトする場合は、メタリフレッシュを使用する必要があります。

<meta http-equiv="refresh" content="5;URL='http://example.com/'">
于 2012-07-23T15:23:27.120 に答える
0

ステートメントのheader()前に呼び出しを移動するだけです。echo

<?php
/* ... */
if($login->validateLogin()){

    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $username;
    $list = $login->getUserInfo();
    $_SESSION['id'] = $list['id'];
    $_SESSION['thumb'] = $list['img_thumb'];

    header("Refresh: 2; url=index.php"); // Put this *before* any output
    echo '<div class="content">';
    echo '<h1>Thank you for logging in '.$username.'. Redirecting...</h1>';
    echo '</div>';

}else{

    echo '<div class="content">';
    echo '<h1>Sorry but we didn\'t recognise those login details, please try again.</h1>';
    echo '</div>';

}
/* ... */
于 2012-07-23T15:23:41.890 に答える
0

echoを使用してから、Locationのヘッダーを設定しようとすると、常にそのエラーが発生します。¿リダイレクトするよりも、リダイレクトについてユーザーに知らせる方がよいでしょうか。そのようなメッセージを表示したい場合(このアプローチが機能したとしても、1秒間は表示されません)、JavaScriptを使用してコンテンツを更新し、何らかの遅延を使用する必要があります...

...しかし多分それはあまりにも多くの仕事です。ログイン後にウェルカムメッセージを表示する場合は、それで十分ですよね?:)

于 2012-07-23T15:24:12.390 に答える