0

これは十分に単純なはずですが、少し問題があります。

セッション変数が設定されているかどうかに応じて、ログイン ページとメイン コンテンツ ページの両方であるインデックス ページがあります。

リダイレクト処理にPHPからエコーされるJavaScriptを使ってみたのですが、見た目が雑で少し時間がかかるので、header("location: abc.php")に切り替えました。これをインデックス ページに使用する際の問題は、出力が送信された後に機能しないことです。また、メタ タグを使用してページを更新しようとしましたが、すべてのブラウザーで機能するとは限りません。

この状況を処理する最善の方法は何ですか?

前もって感謝します。

4

4 に答える 4

1
<?php
session_start();

//all of the php code goes here

header("location: samepage.php")

?>

phpのすべてのコードがブラウザのトップレベルにあり、echoコマンドを使用していないことを確認してください。そうしないと、echoコマンドを使用する代わりに、ページの上部にechoのようなものが表示されます。必要に応じて、html本体で変数を使用します。

于 2012-09-28T03:42:39.910 に答える
1

どれでも使用できます。ただし、header("location: abc.php")応答を送信した後は機能しません。回避策は簡単です。出力バッファリングを使用します。

<?php
ob_start()

//here goes many lines of your wonderful php code blocks

//now send the header based on your logic
header("location: abc.php")

ob_end_flush()

詳細については、公式ドキュメントを確認してください

更新: @zerkms の提案を検討できます。他のページに静かにリダイレクトする必要がある場合は、header()関数を使用して出力を送信する前にリダイレクトしてください。ただし、リダイレクトしていることを示したい場合は、使用していたように javascript を使用できます。後者の場合は、Meta Refreshも使用できます

<meta http-equiv="refresh" content="5;URL='http://example.com/'">

ob_start()これに役立ちます。おそらく、ページに多くのものを表示してから、一時的にリダイレクトされることを伝えるからです。上記の例では、ユーザーを 5 秒で example.com にリダイレクトします。

于 2012-09-28T03:30:21.803 に答える
0

これはあなたが望むことをしますか?

<?php
session_start();

if ($_SESSION['logged_in']) {
  header("Location: mainpage.php");
  exit();
}

// Display login form
于 2012-09-28T04:30:41.023 に答える
-1

あなたはこれを試すことができます

JAVASCRIPT

function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);",timeoutPeriod);
 }

HTML

 <!--The page will refresh every 5 seconds.-->   
 <body onload="timedRefresh(5000)">
于 2012-09-28T03:42:59.723 に答える