0

私はlogin.phpにこのコードを持っています

if ( $sth->execute() ) {
    $row = $sth->fetch(PDO::FETCH_ASSOC);
    if ( $row ) {
        var_dump($row); // See below
        $_SESSION['login'] = $row['login'];
        setcookie('login', $row['login'], time() * 7 * 24 * 60 * 60);
        if ( $row['right'] == ACCESS_ADMIN ) {
            echo "true"; // true
            $_SESSION['right'] = ACCESS_ADMIN;
            setcookie('right', $row['login'], time() * 7 * 24 * 60 * 60);
        }
    }
}


var_dump($row) - array(3) 
{ 
    ["login"]=> string(6) "phplox"
    ["password"]=> string(32) "827ccb0eea8a706c4c34a16891f84e7b"
    ["right"]=> string(5) "admin" 
} ?>
<br>

はい、大丈夫です。index.phpに移動します。

<?php var_dump($_COOKIE) ?> `// array(1) { ["PHPSESSID"]=> string(26) "o05mr9luc2ok8ieadss4v9mhg0" }`

しかし、

<?php var_dump($_SESSION) ?> // 

結果は次のとおりです。

array(3) 
{
    ["request_token"]=> string(32) "335f1dcd4283889f0f2fe602cfa36d71"
    ["login"]=> string(6) "phplox" ["right"]=> string(5) "admin" 
}
4

2 に答える 2

0

これ:

time() * 7 * 24 * 60 * 60

オーバーフローするため、値をラップアラウンドintして過去を参照する値を作成します。したがって、ブラウザはCookieを作成しません。次のように変更します。

time() + 7 * 24 * 60 * 60

また、MrCodeが言ったように、を使用しない限り、Cookieを送信する前に出力を送信しないでくださいob_start()

お役に立てれば

于 2013-01-23T07:23:38.477 に答える
0

Cookie を設定する前に出力を送信することはできません。Cookie は HTTP ヘッダーを介して送信されるため、出力がブラウザーに送信される前に送信する必要があります。ここでは、何かをエコーし​​てから、Cookie の設定を試みます。

            echo "true"; // <--- REMOVE THIS
            $_SESSION['right'] = ACCESS_ADMIN;
            setcookie('right', $row['login'], time() + (7 * 24 * 60 * 60)); // add to the time, don't multiply time()

出力がすでに送信されている場合setcookie()はブール値を返すの戻り値を確認することもできます。false

于 2013-01-23T07:20:45.790 に答える