-2

次の警告が表示されます。

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent

しかし、私が最初にこれを実際に行うのはob_start..

テスト スクリプト:

ob_start();
$session = new SessionClass();

echo "Test";

セッションクラス:

function __destruct() {
    session_regenerate_id(true);
    session_write_close();
}

少なくとも、クラスのコンストラクター:

    session_set_save_handler(array(__CLASS__, '_open'),
                             array(__CLASS__, '_close'),
                             array(__CLASS__, '_read'),
                             array(__CLASS__, '_write'),
                             array(__CLASS__, '_destroy'),
                             array(__CLASS__, '_gc'));
    session_name($sessionName);
    session_start();

Test スクリプトは、「Test」JSONによって出力を行う必要があります。ECHOしかし、そうではありません...

4

1 に答える 1

1

PHP ドキュメントを参照してください__destruct(): http://php.net/manual/en/language.oop5.decon.php

スクリプトのシャットダウン中に呼び出されるデストラクタには、HTTP ヘッダーが既に送信されています。

session_regenerate_id()セッションIDでCookieを送信しようとしますが、デストラクタでそれを呼び出しているため、ヘッダーはすでに送信されているため、エラーメッセージが表示されます.

セッション ID を再生成する必要があるのはなぜですか? あなたのコードは、最初にセッションを開始し、ID を生成し、データを送信してからセッション ID を再生成してから閉じることを提案しています。特別な理由がない限り、その必要はまったくありません。

于 2013-09-27T12:49:23.453 に答える