2

重複の可能性:
PHP によって既に送信されたヘッダー

単純なログイン ページを作成していますが、$_SESSION変数がページ間で転送されません。session_start()各ページの冒頭、フォルダー書き込み特権などに関する他の多くの投稿を読みましsession_write_close()たが、どれも機能しませんでした。有無にかかわらず違いはないので、そのsession_write_close()ままにしておきます。以下のコードはすべて、どこ$login_failから来たのかなど、上下のコードを省略しているため、正常に機能します。

現在、$_SESSION以下のコードに示すように変数を設定しています。

if($login_fail == "")
{
    $query = "SELECT first_name, last_name, email_address,password FROM user_info WHERE     email_address = '$email_address' AND password = '$password'";
    $result = mysql_query($query);

    if(!$result) die ("Database access : " .mysql_error());
    elseif (mysql_num_rows($result))
    {
        $row = mysql_fetch_row($result);
        $token = "$email_address";
        $token1 = "$password";
        echo "token: $token, token1: $token1, row[1]: $row[1], row2: $row[2] </ br>";
        if($token == $row[2] && $token1 == $row[3]) 
        {
            session_start();
            $_SESSION['first_name'] = $row[0];
            $_SESSION['last_name'] = $row[1];
            $_SESSION['email_address'] = $row[2];
            $_SESSION['password'] = $row[3];
            $_SESSION['check'] = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
            //print_r($_SESSION);
            session_write_close();
            header("Location: http://127.0.0.1/websiteproject/test.php"); 
        }
        else die("Invalid username/password combination");       
    }
}
else
{
    echo "Login failed. Please try again.";
}

私はやったprint_r($_SESSION)し、それはすべての正しい情報を出力します。

セッション変数は、test.php で再度呼び出され、非常に単純なコードで何が起こるかを確認します。

session_start();
print_r($_SESSION);

結果は空の配列です。セッションが書き込まれている easyphp 一時ファイルに移動すると、常に 2 つのファイルが見つかります。元のファイルには正しい情報がすべて含まれており、新しいファイルには情報が含まれていません。2番目に呼び出すと、session_start()文字通り新しいセッションが開始され、現在のセッションが呼び出されないように見えます。

私はできるだけ多くの情報を提供し、人々の時間を無駄にしないように調査を行うようにしています. どんなアイデアでも大歓迎です。奇妙なことに、これは数日前に機能していましたが、プログラムの奥深くでファイルに変更を加え始めたところ、これが発生しました。だから私test.phpは転送の問題についてもっと知るために作った.

4

1 に答える 1

7

session_start()データまたは空白がブラウザに出力されると、呼び出すことはできません。

投稿したコードでは、セッションを開始しない呼び出しecho "token: $token, token1: $token1, row[1]: $row[1], row2: $row[2] ";の前に呼び出しています。session_start()

スクリプトの先頭に追加error_reporting(E_ALL); ini_set('display_errors', 1);すると、出力が既に送信されているため、セッションを開始できないという警告が表示されます。

session_start();呼び出しをファイルの先頭に移動してみてください。

于 2012-07-07T19:35:36.080 に答える