-3

3 つの URL に Cookie を設定する単純な PHP ページがあります。問題は、ヘッダー情報をまったく送信していないにもかかわらず、ヘッダー エラーが発生することです。これらのエラーを発生させずに以下の PHP を記述するにはどうすればよいですか?

完全な PHP コード:

<?php
    if ($_GET["validate"] == 1)
    {
        setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.com", 0); //Access granted
        setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.net", 0);
        setcookie("siteaccess", "AccessGranted", time()+(36*1*1), "/", "b********.zxq.net", 0);

        $page = urldecode($_GET["preturn"]);
        echo '<meta http-equiv="Refresh" content="0;' . $page . '">';
    }
    else
    {
        echo "Illegal page access";
    }
?>

ページ読み込み時のエラー:

Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php:2) in /www/zxq.net/b/i/t/bitfracture/htdocs/authenticate.php on line 6

ページ読み込み時の URL:

http://b*******.com/authenticate.php?preturn=%2Fcaptcha%2Findex.php&validate=1

詳細説明: このページは、私のサイトにアクセスできる 3 つの URL すべてに Cookie を設定します。このページは、ユーザーが簡単なアンチ ロボット テストを完了した後に読み込まれます。このテストは、ダウンロード カウンターへのロボット スパムを防止するために作成されています。Cookie が設定されると、このページは、最初にここに送信されたページにリダイレクトされます。その後、Cookie が配置されるため、ユーザーには認証キャプチャが表示されなくなります。

さらに情報を提供する必要がある場合はお知らせください。Cookie を正しく設定できるように、これらのエラーを解消するだけで済みます。

4

2 に答える 2

3

ほとんどの人が思いつかない小さな問題です。ただし、PHP コードの前に 1行空行があると、データが送信されます。空白行を削除するだけです。これが誰かに役立つことを願っています!

于 2013-04-26T03:26:23.330 に答える
0

setcookie()ドキュメント: _

他のヘッダーと同様に、Cookie はスクリプトからの出力の前に送信する必要があります (これはプロトコルの制限です)。これには、タグや空白を含め、出力の前にこの関数を呼び出す必要があります。

問題は、問題のコード部分ではありません。関数の前に少なくとも空白がありsetcookie()ます。

于 2013-04-26T03:29:44.343 に答える